为什么调用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);
答案 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个选择。
thisMonth
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());