【发布时间】:2011-06-15 10:13:55
【问题描述】:
我正在尝试创建一个简单的脚本,根据从 2011 年 7 月 6 日星期三开始的双周计划,为我提供下一个回收日期。所以我创建了这个简单的函数...
function getNextDate(startDate) {
if (today <= startDate) {
return startDate;
}
// calculate the day since the start date.
var totalDays = Math.ceil((today.getTime()-startDate.getTime())/(one_day));
// check to see if this day falls on a recycle day
var bumpDays = totalDays%14; // mod 14 -- pickup up every 14 days...
// pickup is today
if (bumpDays == 0) {
return today;
}
// return the closest day which is in 14 days, less the # of days since the last
// pick up..
var ms = today.getTime() + ((14- bumpDays) * one_day);
return new Date(ms);
}
并且可以这样称呼它......
var today=new Date();
var one_day=1000*60*60*24; // one day in milliseconds
var nextDate = getNextDate(new Date(2011,06,06));
到目前为止一切顺利...但是当我将“今天”计划到 2011 年 10 月 27 日时,我会将 2011 年 8 月 11 日星期二作为下一个日期,而不是 2011 年 11 月 9 日星期三...实际上每个从现在到 2011 年 10 月 26 日的那一天预测正确的接送......从 2011 年 10 月 27 日到 2012 年 2 月 28 日的每个日期都预测周二而不是周三。然后从 2012 年 2 月 29 日(闰年)到 2012 年 10 月 24 日(嗯,又是 10 月)的每个日期都正确预测星期三。我错过了什么?任何帮助将不胜感激..
V
【问题讨论】:
-
天花板不应该是地板吗?因为是你使用 2011-06-06 1:00u totalDays 将是 1,下一次取件将在 13 天而不是 14 天,所以是星期二。
-
看起来很奇怪。我得到了
one_day=1000*60*60*24; today = new Date(2011,8,27); nextDate = getNextDate(new Date(2011,6,6));的正确日期,而nextDate 是Wed Sep 28 2011 00:00:00 GMT+,这是正确的吗?在 FF4 上测试。 -
startDate 总是新的 Date(2011,06,06) -- 所以它不应该移动
-
Raze,您使用的日期可以正常使用,请尝试 2011 年 10 月 27 日至 2012 年 2 月 28 日范围内的日期..
-
如果您在美国,那么您在 10 月到 11 月的跨度内正从夏令时过渡到标准时间。
标签: javascript math date