为什么调用Javascript的Date库如date.setMonth(date.getMonth() - 1)会在这里返回1426456040720?

时间:2015-04-15 22:54:13

标签: javascript date

为什么调用Javascript的日期库(如date.setMonth(date.getMonth() - 1)会在此处返回1426456040720?

由于时区和文化,我希望你可以获得不同的数字。

我觉得我必须遗漏一些东西,我确定这是我一个月总是减少的。

这是一个codepen:

http://codepen.io/hally9k/pen/pvMxBP?editors=101

var thisMonth = new Date();

console.log('this month: ' + thisMonth);

var lastMonth = thisMonth.setMonth(thisMonth.getMonth() - 1);

console.log('last month: ' + lastMonth); 

5 个答案:

答案 0 :(得分:4)

.setMonth()的返回值是日期对象的纪元以来的ms。您可以在ECMAScript规范here中看到预期的返回值。

.setMonth()修改其Date对象。如果您想要新月份值,可以使用.getMonth()从该对象获取新月份值。

如果您只是想在更改后的新月份,则可以执行以下操作:

var d = new Date();
console.log('this month: ' + d.getMonth());
d.setMonth(d.getMonth() - 1);
console.log('previous month: ' + d.getMonth()); 

答案 1 :(得分:1)

thisMonth.setMonth将月份设置为thisMonth并以毫秒为单位返回新日期。

所以你有2个选择。

  1. 打印thisMonth
  2. print new Date(lastMonth)

答案 2 :(得分:1)

构建新日期:

var lastMonth = new Date(thisMonth.setMonth(thisMonth.getMonth() - 1));

setMonth()返回一个数字,表示自UTC时间1970年1月1日以来的毫秒数。使用新日期将以日期格式转换该数字。

您可以使用lastMonth.getMonth()获取月份,但如果您希望将其用于显示目的,请考虑getMonth()从0返回到11.(0是1月)。

答案 3 :(得分:1)

该问题可能与此解决方案可能包含边缘情况(例如一个月的第31天或闰年)中的错误有关。根据{{​​3}} StackOverflow问题,您希望CodePen中的代码看起来像这样:

var thisMonth = new Date();

$('#date').html(thisMonth);

var currentMonth = thisMonth.getMonth();
thisMonth.setMonth(thisMonth.getMonth() - 1);

if (thisMonth.getMonth() != ((currentMonth - 1) % 12)) {
  thisMonth.setDate(0);
}

$('#prevDate').html(thisMonth); 

答案 4 :(得分:0)

DateTime.setMonth返回正在设置的月份的unix时间戳,并更改调用它的DateTime对象的值。

E.g。如果您将最后一行更改为此数字,则为1:

console.log('last month: ' + thisMonth.getMonth());