我正在尝试从开始日期和天数计算日期,因此基本上将天数添加到开始日期并获得结束日期。问题是我得到了一些奇怪的结果,但只是在一个日期,我已经有几天试图想出这个了。
功能是:
CallculateDateFromDays = function(startDate, days) {
var policy_start_date_array = startDate.split("-");
var policy_start_date = new Date(policy_start_date_array[2], policy_start_date_array[1]-1, policy_start_date_array[0]);
var policy_start_date_add = new Date(policy_start_date.getTime() + ((days-1) * 24 * 60 * 60 * 1000));
var dateString = ("0" + (policy_start_date_add.getDate())).slice(-2) + "-" + ("0" + (policy_start_date_add.getMonth()+1)).slice(-2) + "-" + policy_start_date_add.getFullYear();
return dateString;}
直到我使用日期“28-10-2012”它才有效,即使我加了两天,它也会让我回到相同的日期。
任何想法,我都难过。
答案 0 :(得分:2)
10月28日,时间从夏令时变为“正常”,所以当天不等于24小时。这可能会导致代码出现问题。
还为什么(days-1) * 24 * 60 * 60 * 1000
?如果将days
设置为1
,则整个表达式的计算结果为零...
答案 1 :(得分:2)
由于夏令时结束,您的本地时区可能会发生变化。
> new Date(2012, 9, 28)
Sun Oct 28 2012 00:00:00 GMT+0200
> // 48 hours later:
> new Date(new Date(2012, 9, 28) + 2 * 24 * 60 * 60 * 1000)
Mon Oct 29 2012 23:00:00 GMT+0100
始终使用UTC方法!
顺便说一句,使用setDate
添加天数要容易得多,这也适用于时区问题:
function calculateDateFromDays(startDate, days) {
var datestrings = startDate.split("-"),
date = new Date(+datestrings[2], datestrings[1]-1, +datestrings[0]);
date.setDate(date.getDate() + days);
return [("0" + date.getDate()).slice(-2), ("0" + (date.getMonth()+1)).slice(-2), date.getFullYear()].join("-");
}
答案 2 :(得分:1)
有一种更简单的方法可以实现这一目标: http://jsfiddle.net/pjambet/wZEFe/2/
答案 3 :(得分:0)