为什么javascript的.getTime()+ 24 * 60 * 60 * 1000在2013年10月27日之后获得筹码?

时间:2013-06-02 16:37:01

标签: javascript date gettime

我只是创建了一个简单的日历,当用户点击下一个日程表时,第二天非常简单:

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 个答案:

答案 0 :(得分:6)

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

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

从根本上说,你需要弄清楚你是否真的想要增加一天或增加24小时 - 它们不是一回事。您还需要确定您感兴趣的时区。不幸的是,我对Javascripts日期/时间API知之甚少,但这几乎肯定是问题的原因。

答案 1 :(得分:1)

您可以直接使用设置日期函数,而不是添加一天中的毫秒数。

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

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

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

答案 2 :(得分:0)

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

var dateSelected = new Date('02/06/2013'); //any date 
dateSelected.setDate(dateSelected.getDate() + 1);
alert(dateSelected.getDate());

答案 3 :(得分:0)

当然,如果没有Moment.js答案,则无法解决任何Ja​​vaScript Date问题:

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

每次都有高级API。 : - )