0

我正在尝试从开始日期和天数计算日期,因此基本上将天数添加到开始日期并获得结束日期。问题是我得到了一些奇怪的结果,但只有一次,我已经几天时间试图弄清楚这一点。

功能是:

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”之前一直有效,即使我增加了 2 天,它也会给我返回相同的日期。

任何想法,我都很难过。

4

4 回答 4

2

10 月 28 日,时间从 DST 变为“正常”,因此一天不等于 24 小时。这可能会导致您的代码出现问题。

还有为什么(days-1) * 24 * 60 * 60 * 1000?如果您设置days1整个表达式计算为零...

于 2012-10-14T19:40:33.310 回答
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("-");
}
于 2012-10-14T19:42:36.203 回答
1

有一种更简单的方法可以实现:http: //jsfiddle.net/pjambet/wZEFe/2/

于 2012-10-14T19:40:07.373 回答
0

使用 javascript 日期格式:

如何格式化 JavaScript 日期

因此,您不必手动尝试解析日期字符串。

于 2012-10-14T19:39:51.180 回答