2

我只是在创建一个简单的日历,当用户单击下一步时,它会在第二天得到,非常简单的代码:

var dateSelected = new Date('02/06/2013'); //any date 
var day = new Date(dateSelected.getTime() + 24*60*60*1000);
alert(day.getDate());

这适用于所有日期,但由于某种原因,当日期为 2013 年 10 月 27 日时,它不会在第二天

var dateSelected = new Date('10/27/2013');

我似乎无法弄清楚为什么,如果我手动转到第二天 10 月 28 日,它会继续正常工作。

任何想法为什么会发生这种情况?

更新:我通过添加时间和日期来修复它:

var dateSelected = new Date('10/27/2013 12:00:00');
4

4 回答 4

9

强烈怀疑这是因为您的时区 - 不幸的是,我们不知道。

2013 年 10 月 27 日,许多时区“回退”一小时 - 这意味着一天实际上是 25 小时。因此,如果在一天的第一个小时内开始,将 24 小时添加到原始值不会改变日期。

从根本上说,你需要弄清楚你是想增加一天还是增加 24 小时——它们不是一回事。您还需要确定您感兴趣的时区。不幸的是,我对 Javascript 日期/时间 API 了解不多,但这几乎肯定是问题的原因。

于 2013-06-02T16:42:42.563 回答
1

不用加一天的毫秒数,可以直接使用set date函数。

var dateSelected = new Date('10/27/2013');
var daysToAdd = 1;

var nextDay = new Date(dateSelected.getTime());
nextDay.setDate(dateSelected.getDate() + daysToAdd);

这在滚动到下个月时也适用,并且应该适用于不同的时区。

于 2013-06-02T16:51:57.883 回答
0

正如 Jon Skeet 已经提到的,问题是由您当地的时区引起的。作为一种可能的解决方案,您可以使用对象的setDategetDate函数Date

var dateSelected = new Date('02/06/2013'); //any date 
dateSelected.setDate(dateSelected.getDate() + 1);
alert(dateSelected.getDate());
于 2013-06-02T16:49:24.997 回答
0

当然,如果没有Moment.js的答案,任何 JavaScriptDate问题都不可能完整:

var m = moment('10/27/2013','MM/DD/YYYY').add('days', 1);

每次都提供卓越的 API。:-)

于 2013-06-03T02:04:43.737 回答