2017-06-22 78 views
2

我正在查看一個半舊的代碼庫,其中使用以下代碼根據用戶的區域設置格式YYYY-MM-DD格式的日期:根據Firefox中的區域設置格式化「YYYY-MM-DD」日期字符串

new Date('2000-01-01').toLocaleDateString(navigator.language) 

然而,這並不工作在Firefox,因爲new Date('2000-01-01')返回datetime(時間00:00)在UTC而toLocaleDateString使用用戶的本地時區,因此上述將返回"December 31, 1999"在美國的用戶。

跨瀏覽器做這件事的理智,安全的方式是什麼?是否有可能沒有一個或多個額外的依賴?

+0

你期望看到什麼?這只是格式化的問題 – FieryCat

+0

可能是https://stackoverflow.com/questions/439630/how-do-you-create-a-javascript-date-object -with-a-set-timezone-without-using-as –

+0

我希望看到類似於「2000年1月1日」的內容。 – beta

回答

1

如果添加時間戳到日期字符串似乎與在本地時區那個時候被初始化:

new Date('2000-01-01T00:00:00'); 

我在Chrome和Firefox的嘗試這樣做,它似乎要工作。但是,應該避免使用字符串創建日期,因爲不能保證它在不同瀏覽器中保持一致。這是更好地打破了日成及其零部件,分析它的數值和初始化的日期這樣:

var dateParts = '2000-01-01'.split('-').map(Number); 
new Date(
    dateParts[0], 
    dateParts[1] - 1, // month is base 0 
    dateParts[2] 
); 

更新:原來的Safari假設UTC即使附加一個時間戳的日期字符串,所以這是解析它並用數值初始化日期的另一個理由,因爲它總是使用本地時區。

+0

@beta是的,但是如果你運行'.toLocaleDateString()'?這不是輸出重要的地方嗎? –

+0

是的。對不起,刪除評論。立即意識到我錯了。 – beta