use*_*301 14 javascript math date
我正在尝试创建一个简单的脚本,根据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);
}
Run Code Online (Sandbox Code Playgroud)
并可以称之为......
var today=new Date();
var one_day=1000*60*60*24; // one day in milliseconds
var nextDate = getNextDate(new Date(2011,06,06));
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好......但是当我将"今天"投射到2011年10月27日时,我将于2011年11月11日星期二作为下一个日期而不是2011年11月9日星期三...事实上每天都是从现在开始通过10/26/2011预测正确的接送......并且从2011年10月27日至2012年2月28日的每个日期都是星期二而不是星期三.然后每个日期从2012年2月29日(闰年)到2012年10月24日(10月再次),正确地预测周三.我错过了什么?任何帮助将不胜感激..
V
Exe*_*ian 35
最简单的方法是Date使用更新对象setDate.由于此答案的评论表明这不是规范的正式部分,但它在所有主流浏览器上都受支持.
你应该永远不会更新不同的Date对象比你原来的一个getDate随叫随到.
示例实施:
var incrementDate = function (date, amount) {
var tmpDate = new Date(date);
tmpDate.setDate(tmpDate.getDate() + amount)
return tmpDate;
};
Run Code Online (Sandbox Code Playgroud)
如果您尝试增加日期,请使用此功能.它将接受正面和负面的价值观.它还保证不更改使用的日期对象.这样可以防止在您不希望更新更改对象值时可能发生的任何错误.
使用不正确:
var startDate = new Date('2013-11-01T11:00:00');
var a = new Date();
a.setDate(startDate.getDate() + 14)
Run Code Online (Sandbox Code Playgroud)
这将根据值更新startDate14天的"日期"值a.因为a先前定义的值不相同,startDate所以可能得到错误的值.
| 归档时间: |
|
| 查看次数: |
24453 次 |
| 最近记录: |