我正在使用Keith Wood的jQuery日期选择器http://keith-wood.name/datepick.html制作一个日历,用户可以用它在一系列日期之间切换或选择单个日期。网站本身可以在http://www.hasslers.org上查看。
日历本身运行良好,但计算日期范围的成本时存在问题。代码的工作方式是从日期选择器中获取表示两个日期的字符串并将其拆分为单独的字符串。然后,将字符串信息转换为表示天、月和年的单独变量。
当我使用警告窗口弹出它们时,所有变量都显示正确的值。我可以选择几乎任何一个开始日期,并且脚本可以完美地工作;然而,当我选择当前日期或后一天时,新日期变量会将自己设置为10月1日。这只发生在靠近当前日期的日期。
足够我的唠叨不提了,这里是似乎是麻烦制造者的代码部分:
日历本身运行良好,但计算日期范围的成本时存在问题。代码的工作方式是从日期选择器中获取表示两个日期的字符串并将其拆分为单独的字符串。然后,将字符串信息转换为表示天、月和年的单独变量。
当我使用警告窗口弹出它们时,所有变量都显示正确的值。我可以选择几乎任何一个开始日期,并且脚本可以完美地工作;然而,当我选择当前日期或后一天时,新日期变量会将自己设置为10月1日。这只发生在靠近当前日期的日期。
足够我的唠叨不提了,这里是似乎是麻烦制造者的代码部分:
var dates_string = datepicker_data.toString();
var dates = dates_string.split(',');
var day1 = dates[0].slice(8, 10);
var day2 = dates[1].slice(8, 10);
var month1 = dates[0].slice(4, 7);
var month2 = dates[1].slice(4, 7);
switch(month1) {
case "Jan":
month1 = 0;
break;
case "Feb":
month1 = 1;
break;
case "Mar":
month1 = 2;
break;
case "Aprl":
month1 = 3;
break;
case "May":
month1 = 4;
break;
case "Jun":
month1 = 5;
break;
case "Jul":
month1 = 6;
break;
case "Aug":
month1 = 7;
break;
case "Sep":
month1 = 8;
break;
case "Oct":
month1 = 9;
break;
case "Nov":
month1 = 10;
break;
case "Dec":
month1 = 11;
break;
}
switch(month2) {
case "Jan":
month2 = 0;
break;
case "Feb":
month2 = 1;
break;
case "Mar":
month2 = 2;
break;
case "Aprl":
month2 = 3;
break;
case "May":
month2 = 4;
break;
case "Jun":
month2 = 5;
break;
case "Jul":
month2 = 6;
break;
case "Aug":
month2 = 7;
break;
case "Sep":
month2 = 8;
break;
case "Oct":
month2 = 9;
break;
case "Nov":
month2 = 10;
break;
case "Dec":
month2 = 11;
break;
}
var year1 = dates[0].slice(11, 15);
var year2 = dates[1].slice(11, 15);
var split_date1 = new Date();
var split_date2 = new Date();
split_date1.setDate(parseInt(day1));
split_date2.setDate(parseInt(day2));
split_date1.setMonth(month1);
split_date2.setMonth(month2);
split_date1.setYear(parseInt(year1));
split_date2.setYear(parseInt(year2));
// get number of days by dividing by 86400000 milliseconds (number in a day)
number_of_days = ((split_date2 - split_date1) / 86400000) + 1;