2013-01-11 98 views
3

我有真正的麻煩工作了JavaScript的getDay()方法(http://www.w3schools.com/jsref/jsref_getday.asp)是否符合ISO 8601getDay()是否符合ISO 8601?

getDay()回報0週日,1週一等等。

的文檔建議映射到一天的名字,如這個:

var weekday=new Array(7); 
weekday[0]="Sunday"; 
weekday[1]="Monday"; 
weekday[2]="Tuesday"; 
... 
var n = weekday[(new Date()).getDay()]; 

我只能看到ISO標準定義星期一爲一週的第一天。我想這意味着星期一應該是0,而不是星期天。

有沒有人有這方面的經驗?你能澄清一下嗎?你會推薦重寫一週的第一天星期一的方法嗎?

回答

2

如何平日都表示的事項,如果你想使用的日期格式,其中平日實際上是以數字表示,例如YYYY-Www-D格式,或者如果您想獲取特定日期的星期編號。

否則,無論工作日是如何以數字表示的。星期一仍然是星期一。

+0

雖然沒有標準嗎?我正在創建一個使用ISO Week Year,ISO Week和ISO Day Number的公共API。我想確保我正確實施雙方,如果有標準,我想在我的應用程序的各個部分遵守它。 –

+1

@JonnyH:是的,如果你希望以ISO8601格式表示一週的數字,那麼你必須使用'(theDate.getDay()+ 6)%7 + 1'來轉換Javascript星期幾數字,以使週日7而不是0. – Guffa

+0

這看起來像問題的確定答案,謝謝。 –

3
var weekday=new Array(7); 
weekday[0]="Monday"; 
weekday[1]="Tuesday"; 
weekday[2]="Wednesday"; 
... 
var n = weekday[((new Date()).getDay() + 6) % 7]; 

或延長日期原型:

Date.prototype.getISODay = function(){ return (this.getDay() + 6) % 7; } 

然後用

var n = weekday[(new Date()).getISODay()]; 
+0

這是一個很好的概念,但這個答案包含錯誤的日期編號。根據ISO 8601,星期一是1,星期日是7. – AgDude

1

我可以找到哪些州的哪些數字應該是一週的日子的唯一來源是Wikipediathis page。兩者均建議星期幾的數字應爲17,並從開始週一

我支持ic3b3rg的建議延伸Date.prototype,雖然會建議使用UTC和文字來獲取名稱。以下示例使用對象和一個匿名函數,因此名稱只需定義一次。

(function() { 
    var dayNames = {1: 'Monday', 2: 'Tuesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Friday', 6: 'Saturday', 7: 'Sunday'}; 
    // Local time 
    Date.prototype.getISODay = function() {return this.getDay() || 7;}; 
    Date.prototype.getISODayName = function() {return dayNames[this.getDay() || 7];}; 
    // Date.prototype.getDayName = Date.prototype.getISODayName 
    // UTC 
    Date.prototype.getUTCISODay = function() {return this.getUTCDay() || 7;}; 
    Date.prototype.getUTCISODayName = function() {return dayNames[this.getUTCDay() || 7];}; 
    // Date.prototype.getUTCDayName = Date.prototype.getUTCISODayName; 
}()); 

隨着時間的名稱將是相同的ISO日期名(假設英語),我已經在額外的線路,如果你想兩者都可以去掉加。