我有以下代码片段(实际上我今天使用new Date()
获取(2016年3月4日),但它永远不会是3月,所以要做个合理的测试我已经确定了日期明确。
var n = new Date(2016,2,4);
var d = new Date (
n.getFullYear(),
n.getMonth(),
-1,
6,0,0);
console.log(d.toString());
当n现在(除非它不是),d是我希望成为前一个月最后一天的新日期。我没有得到2016年2月29日上午6点UTC,这是我的预期,而不是2月28日。
这在Chrome和Iceweasel(Firefox)中都有相同的结果。我应该如何找到上个月的最后一天(特别是今年的闰年)
如果重要,我是GMT时区。
答案 0 :(得分:4)
那是因为天是1,而不是0。
var march4 = new Date(2016, 2, 4);
var feb29 = new Date(
march4.getFullYear(),
march4.getMonth(),
0); // <-- go to the day before the first of the given month
console.log(feb29); // Mon Feb 29 2016 00:00:00 GMT-0700 (Mountain Standard Time)
作为参考,如果您在4月到3月之间采用相同的技巧,那么您将获得3月31日。
var april = new Date(2016, 3, 4);
var march = new Date(
april.getFullYear(),
april.getMonth(),
0);
console.log(march); // Thu Mar 31 2016 06:00:00 GMT-0600 (Mountain Daylight Time)
答案 1 :(得分:1)
事实上,它承认
如果您尝试这样做,它会起作用:
Date (2016, 2, 0);
它带给我Mon Feb 29 2016 00:00:00 GMT-0300
而不是-1,尝试0:
var n = new Date(2016,2,1);
var d = new Date (
n.getFullYear(),
n.getMonth(),
0,
6,0,0);
console.log(d.toString());