我只是创建了一个简单的日历,当用户点击下一个日程表时,第二天非常简单:
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');
答案 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
对象的getDate
和Date
函数:
var dateSelected = new Date('02/06/2013'); //any date
dateSelected.setDate(dateSelected.getDate() + 1);
alert(dateSelected.getDate());
答案 3 :(得分:0)
当然,如果没有Moment.js答案,则无法解决任何JavaScript Date
问题:
var m = moment('10/27/2013','MM/DD/YYYY').add('days', 1);
每次都有高级API。 : - )