2016-09-30 40 views
0

我見過的代碼,技術,技巧,破解(你想怎麼稱呼它)的代碼審查:https://codereview.stackexchange.com/questions/142706/take-a-specified-weekday-and-check-if-it-falls-on-the-remaining-days-of-the-curJavaScript - 使用Date.getDate()來獲取一個月的天數。這是如何運作的?

在6號線用於getDate()方法來獲得一個月的天數。指定爲上一個參數的月份。

我打得周圍的這些技術,它似乎工作:

var d = new Date(); 
 
    
 
var sep = new Date(d.getYear(), (d.getMonth() + 1), 0).getDate(); 
 
var oct = new Date(d.getYear(), (d.getMonth() + 2), 0).getDate(); 
 
var nov = new Date(d.getYear(), (d.getMonth() + 3), 0).getDate(); 
 
var dec = new Date(d.getYear(), (d.getMonth() + 4), 0).getDate(); 
 
var jan = new Date(d.getYear(), (d.getMonth() + 5), 0).getDate(); 
 

 
console.log(d.toLocaleString('en-US', { month: 'long' })); 
 
console.log('%s %s %s %s %s', sep, oct, nov, dec, jan);

但是這怎麼可能,它的作品?

我希望Date構造函數只接受有效整數。

人們可以給它任何喜歡的整數。它不會拋出異常。但是:返回的值是廢品。

var d = new Date(); 
 
    
 
var nov = new Date(d.getYear(), (d.getMonth() + 3), 31).getDate(); // November has 30 days. 
 
console.log('%s', nov); // => 31 
 

 
var nov = new Date(d.getYear(), (d.getMonth() + 3), -21).getDate(); // November has 30 days. 
 
console.log('%s', nov); // 9 
 

 
var nov = new Date(d.getYear(), (d.getMonth() + 3), 301).getDate(); // November has 30 days. 
 
console.log('%s', nov); // 27

任何人只要有一些見解可以解釋發生的事情呢?

回答

1

這簡直是Date類的屬性,如記錄在MDN:

當日期被稱爲具有一個以上參數的構造,如果值低於其邏輯範圍更大(如13提供爲月份值或70分鐘值),相鄰值將被調整。例如。新日期(2013,13,1)等同於新日期(2014,1,1),兩者均創建2014-02-01的日期(請注意該月爲0)。對於其他值也是如此:新日期(2013,2,1,0,70)相當於新日期(2013,2,1,1,10),它們都創建了2013-03-01T01:10:00的日期。

他們討論的值大於它們的邏輯範圍,但是相同的邏輯適用於低於它們的範圍的值。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

+0

啊,好的。我導致某種「環繞」。對? – bew5

+0

是的,這是正確的。 –

0
var d = new Date(); 

變種十一月=新日期(d.getYear(),(d.getMonth()+ 3),31).getDate(); //十一月有30天。 console.log('%s',nov); // => 31 2013年12月31日00:00:00 GMT + 0530(印度標準時間)

var nov = new Date(d.getYear(),(d.getMonth()+ 3),-21 ).getDate(); //十一月有30天。 console.log('%s',nov); // 9 Mon Nov 09 2016 00:00:00 GMT + 0530(印度標準時間)

var nov = new Date(d.getYear(),(d.getMonth()+ 3),301).getDate (); //十一月有30天。 console.log('%s',nov); // 27 Mon Sep 27 2017 00:00:00 GMT + 0530(印度標準時間)

相關問題