我的服務將此返回爲日期7/14/2016 2:40 AM +00:00
。我如何將它轉換爲JS中的UTC?在JavaScript中對字符串進行日期轉換
嘗試:
new Date("7/14/2016 2:40 AM +00:00").toISOString();
在數據庫中的日期已經被存儲爲UTC,所以當我將顯示我想要顯示爲當地時間的日期。
我的服務將此返回爲日期7/14/2016 2:40 AM +00:00
。我如何將它轉換爲JS中的UTC?在JavaScript中對字符串進行日期轉換
嘗試:
new Date("7/14/2016 2:40 AM +00:00").toISOString();
在數據庫中的日期已經被存儲爲UTC,所以當我將顯示我想要顯示爲當地時間的日期。
假設你能保證所有日期該格式,下面的代碼就足夠了:
const datetime = '7/14/2016 2:40 PM +00:00'; // this is what your service returns
const pieces = datetime.split(/[/: ]/);
if (pieces[3] == 12) pieces[3] = 0; // fixes edge case for 12 AM/PM
const hours = pieces[5] === 'PM' ? Number(pieces[3]) + 12 : pieces[3];
const d = new Date(Date.UTC(pieces[2], pieces[0] - 1, pieces[1], hours, pieces[4]));
console.log(datetime); // prints "7/14/2016 2:40 PM +00:00"
console.log(d); // prints Date 2016-07-14T14:40:00.000Z
編輯:有一對夫婦的邊緣情況與此不正確處理,即上午12點/ PM等,但這些也可以很容易地解決。
EDIT2:佔用該邊緣案例。
編輯3:正如評論所述,這隻適用於UTC時間。如果您收到的字符串可以有任何偏移量,這將不起作用。
解析字符串以產生Date
對象的方法很多。
的一種方式是與Date
對象本身,無論是通過使一個字符串的構造,或通過使用Date.parse
。但是,在ECMAScript規範中只需要ISO8601格式。其他任何輸入都是特定於實現的,可能會或可能不會被不同的JavaScript運行時識別。尤其是使用網絡瀏覽器時,瀏覽器支持的格式有很多不同。
此外,環境的語言環境在解析值的方式中扮演着重要角色。 1/2/2016
應該如何解析? 1月2日或2月1日?您展示了7/14/2016
的一個示例,如果在英國運行(例如)日期格式爲DD/MM/YYYY
,則這將是無效輸入。
您可以編寫自定義代碼將字符串分割爲多個部分,分別解析每個部分並撰寫結果。這種方法的主要問題是代碼往往僵化,有時易碎。它應該得到很好的測試,並且需要考慮許多邊緣案例。
您可以使用庫,這是迄今爲止最簡單和最靈活的方法(恕我直言)。有了一個好的圖書館,你可以在其他人的共享經驗中以及在你選擇的圖書館(希望是)的單元測試中感到安心。當然,使用庫會帶來一些折衷,包括增加文件大小和放棄某種程度的控制。您應該仔細評估這些權衡。
有許多日期庫可用於JavaScript。最流行的可能是moment.js,儘管還有其他的可供選擇,而一些較大的框架有時也具有相似的功能。
下面是使用moment.js一個例子:
var i = "7/14/2016 2:40 AM +00:00";
var f = "M/D/YYYY h:mm A Z";
var m = moment(i, f);
var o = m.format(f); // will be in the local time, in the same format as the input
var d = m.toDate(); // if you really want a Date object
var str = "7\/15\/2016 1:00 AM +00:00".replace("+00:00","UTC");
console.log(new Date(str).toISOString()); // 2016-07-15T01:00:00.000Z
'+00:00'是不是已經在UTC? –
你在想這個...... –
是它的UTC,但想將此日期轉換爲本地。當通過此字符串它投擲的錯誤無效的日期 – aswininayak