2016-03-04 50 views
1

我有下面的代码片段(实际上我使用new Date()获得今日(2016年3月4日),但它不会是三月永远,所以是一个明智的测试中,我所取得的日期明确。是否使用Javascript承认闰年

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:00 UTC,这是我本来预期的,相反我正在2月28日。

这给在Chrome和Iceweasel(Firefox)的相同的结果。我应该怎么找到的最后一天上月(尤其是,当今年是闰年等)

如果它的事项,我在GMT时区。

回答

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

事实上,它承认

如果你试试这个,它的工作原理: 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());