簡體   English   中英

如何解析包含時區的日期字符串?

[英]How to parse a date String containing a timezone?

我在String中有日期:

let day = "12/07/1998 12:30 GMT+4"

如何將其轉換為即時日期? 我試過了

let d = moment(day, 'DD/MM/YYYY HH:mm')

但是我不知道如何解析時區。 我在文檔中找不到它

更新於2018/11/6:

較新版本的moment希望您通過時區格式作為以下兩個選項之一:

ZZ => -07:00 -06:00 ... +06:00 +07:00

要么

Z => -0700 -0600 ... +0600 +0700

在這里閱讀更多..

因此,我們需要修復給定的GMT + 4格式以匹配輸入大小寫,我們將使用一些正則表達式和es6模板來重新格式化給定的日期,如下所示: DD/MM/YYYY hh:mm ZZ在末尾注意'ZZ':

演示:

 let date = "12/07/1998 12:30 GMT+4" let justDayAndTime = date.split(/(GMT(\\+|\\-)\\d+)/)[0].trim() let zone = date.match(/\\d+$/)[0] let mark = date.match(/(\\+|\\-)/)[0] let parsed = `${justDayAndTime} ${mark}${moment(zone,"k").format("HH:mm")}` let result = moment(parsed,"DD/MM/YYYY hh:mm ZZ") console.log(result.format('LLLL')) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script> 


回答:

您可以使用格式方法

 moment("12/07/1998 12:30 GMT+4").format('DD/MM/YYYY HH:mm') 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script> 

有關更多時區控制:

https://momentjs.com/timezone/

如果字符串不是ISO 8601或RFC 2822格式,則Moment.js不一定會解析時區。 它期望時區為±HHmm格式,因此GMT+4被忽略。

如果將字符串傳遞給不帶格式信息的構造函數,則會收到警告,並且可能會正確解析它,也可能不會。

如果您無法在源代碼處修復輸入格式,則可以在最后修復它(前提是您知道該格式),然后在解析標記中提供“ Z”,例如:

 /* Fix offset like GMT+4 to +0400 * If offset is 1 digit, pad to 0d00 -8 -> -0800 * If offset is 2 digits, pad to dd00 +10 -> +1000 * If offset is 3 digits, padd to 0ddd +530 -> +0530 * If offset is 4 digits, leave as is +1030 -> +1030 */ function fixOffset(s) { var tz = s.match(/(GMT)([+-])(\\d+)$/); // If not required format, do nothing if (tz.length != 4) return; var h = tz[3]; var offset = h.length == 1? '0' + h + '00' : h.length == 2? h + '00' : h.length == 3? '0' + h : h; return s.replace(/GMT[+-]\\d+$/, tz[2] + offset); } var s = "12/07/1998 12:30 GMT+4"; s = fixOffset(s); console.log('Fixed format: ' + s); console.log( moment(s,'DD/MM/YYYY HH:mm Z').format('LLLL') ); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script> 

解析Timezones字符串的最佳方法是使用moment timezone。 你必須像這個moment.tz(day)那樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM