2016-01-31 46 views
1

的toLocaleString()已過時日期時間,但似乎缺乏替代


我有一個網站,我會員後日期存儲格式爲:YYYY-MM-DD HH:MM :SS轉換過去使用JS用瀏覽器支持

問題是這些日期都與時區UTC一起存儲,我想將這些日期使用JS轉換爲用戶操作系統時區。我知道我可以讓用戶輸入他們的時區,但我想嘗試一些新的功能,儘可能減少用戶的互動。該網站的目標是建立一個非常簡單易用的論壇。

我幾乎已經按照我想要的方式工作,但它目前僅支持Chrome。由於我計劃擁有大量用戶,這還不夠好。

由於時區偏移量的變化,它不夠好,只能檢索當前很多主題似乎暗示的時間偏移量。我想準確顯示例如註冊日期。

這是我目前的解決方案(時區測試只支持鉻,據我所知),它也是在測試版的整個網站上實施。
https://ingsan.net/timezone/

下面的源代碼

var d = new Date(); 
var tzName = d.toLocaleString('en', {timeZoneName:'short'}).split('').pop(); 

var cusid_ele = document.getElementsByClassName('timestamp'); 
for (var i = 0; i < cusid_ele.length; ++i) { 
    var timestamp = cusid_ele[i]; 
    timestamp.innerHTML += " "+tzName; 
    t = new Date(timestamp.innerHTML); 
    usertime = t.toLocaleString() 
    timestamp.innerHTML = usertime; 
} 

我已經使用這個網站多年沒有要求,但是這一次,我似乎無法找到足夠類似地雷的話題。

我使用的方法可能會有問題,它只是簡單地替換分配的類名中的對象。我打算爲其他格式輸出做其他類。

<p>Register date: <span class="timestamp">2016-01-31 20:12:55</span></p> 

如果你有解決這個問題,我將非常感激。我不是專業人士,從來沒有去過任何課程,但我已經成功地自己創建了ingsan.net。幫助一個不起眼的學生;)

+1

你想要完成的事情不是很清楚,但像[moment.js](http://momentjs.com/)這樣的JavaScript庫可能對時區問題有幫助。 – Roberto

回答

0

如果你正在做的是從UTC轉換到瀏覽器的本地時區,你不需要真正試圖找出是什麼時區。只要確保您的輸入清楚地標識爲UTC,並且Date對象的默認行爲是在瀏覽器的本地時區中顯示值。

var input = "2016-01-31 20:12:55"; 
var d = new Date(input + " UTC"); 
var s = d.toString(); 

結果字符串將通過實施和時區,如(幾個例子)有所不同:

"Sun Jan 31 2016 12:12:55 GMT-0800 (Pacific Standard Time)" 
"Sun Jan 31 2016 15:12:55 GMT-0500 (Eastern Standard Time)" 
"Mon Feb 01 2016 01:42:55 GMT+0530 (India Standard Time)" 
"Mon Feb 01 2016 09:12:55 GMT+1300 (New Zealand Daylight Time)" 

這將在所有的瀏覽器。唯一的問題是,您無法控制輸出字符串的格式。這就是toLocaleString可以提供幫助的地方,不過正如您所指出的那樣 - 它不一定在所有瀏覽器中都可以實現。但是,您似乎認爲它已被棄用,事實並非如此。它實際上是更新規範(ECMA-402)的一部分,該規範在各處都尚未廣泛實施。

您還有其他選擇。你可以建立輸出字符串自己,就像這樣:

var z = function(x) {return x < 10 ? '0' + x : x}; 
var s = d.getFullYear() + '-' + z(d.getMonth() + 1) + '-' + z(d.getDate()) + ' ' 
     + z(d.getHours()) + ':' + z(d.getMinutes()) + ':' + z(d.getSeconds()); 

當然,你可以弄清楚如何調整到12小時格式,使用不同的分隔符,不同的日期場序(年月日VS DMY VS MDY)等

或者,您可以只使用一個庫,例如moment.js,它已經配備了。

var input = "2016-01-31 20:12:55"; 
var m = moment.utc(input).local(); // parse as UTC, then switch to local mode 
var s = m.format(); // use any of the format parameters you wish