問題描述
所以我有需要從字符串轉(zhuǎn)換為日期對象的 iso 日期時間.如何保持日期不將其轉(zhuǎn)換為本地瀏覽器時區(qū).
So I have iso date time that need to be converted from a string to date object. How do I keep date from converting it to local browser timezone.
new Date('2013-07-18T17:00:00-05:00')
Thu Jul 18 2013 18:00:00 GMT-0400 (EDT)
我想得到
2013 年 7 月 18 日星期四 17:00:00 GMT-0500 (XX)
Thu Jul 18 2013 17:00:00 GMT-0500 (XX)
推薦答案
雖然 MomentJS 是一個很棒的庫,但它可能無法為每個用例提供解決方案.例如,我的服務(wù)器以 UTC 格式提供日期,并且當日期的時間部分未保存在數(shù)據(jù)庫中(因為它無關(guān)緊要)時,客戶端會收到一個默認時間全為零的字符串 - 午夜 - 并以+0000
的偏移量.然后瀏覽器會根據(jù)我的本地時區(qū)自動調(diào)整,并將時間向后拉幾個小時,結(jié)果是前一天.
While MomentJS is a great library, it may not provide a solution for every use case. For example, my server provides dates in UTC, and when the time portion of the date is not saved in the db (because it's irrelevant), the client receives a string that has a default time of all zeros - midnight - and ends with an offset of +0000
. The browser then automatically adjusts for my local time zone and pulls the time back by a few hours, resulting in the previous day.
MomentJs 也是如此.
This is true with MomentJs as well.
一種解決方案是切掉字符串的時間部分,然后按照其他答案中的說明使用 MomentJS.
One solution is to slice off the time portion of the string, and then use MomentJS as described in the other answers.
但是如果 MomentJS 不是一個可行的選擇會發(fā)生什么,即我已經(jīng)有很多地方使用 JS Date 并且不想更新這么多代碼行?問題是如何首先阻止瀏覽器根據(jù)本地時區(qū)轉(zhuǎn)換日期.答案是,當日期是 ISO 格式時,你不能.
But what happens if MomentJS is not a viable option, i.e. I already have many places that use a JS Date and don't want to update so many lines of code? The question is how to stop the browser from converting dates based on local time zone in the first place. And the answer is, when the date is in ISO format, you cannot.
然而,沒有規(guī)定你傳遞給 JavaScript 的 Date 構(gòu)造函數(shù)的字符串必須是 ISO 格式.如果您只是將分隔年、月、日的 -
替換為 /
,您的瀏覽器將執(zhí)行任何轉(zhuǎn)換.
However, there is no rule that says the string you pass to JavaScript's Date constructor must be in ISO format. If you simply replace the -
that separates the year, month, and day with a /
, your browser will not perform any conversion.
在我的例子中,我只是更改了 Dates 服務(wù)器端的格式,問題就解決了,而無需使用 MomentJS 更新所有客戶端 JS 日期.
In my case, I simply changed the format of the Dates server-side, and the problem was solved without having to update all the client-side JS dates with MomentJS.
請注意,在解析字符串以創(chuàng)建 Date 實例時,JavaScript 的 Date 類的 MDN 文檔會警告不可預(yù)測的瀏覽器行為.
Note that the MDN docs for JavaScript's Date class warn about unpredictable browser-behavior when parsing a string to create a Date instance.
這篇關(guān)于停止 javascript Date 函數(shù)更改時區(qū)偏移量的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!