[英]moment.js unable to convert utc date to local date
我有以下日期的utc格式,我想轉換並顯示為本地日期時間。
// utc
date = 'Thu Oct 27 2016 07:00:00 GMT+0100 (GMT Standard Time)';
// convert to local
moment.utc(date).local().format("ddd MMM DD YYYY HH:mm:ss");
使用上述結果的預期結果應為:
Thu Oct 27 2016 08:00:00
但實際結果顯示如下,即時間不變?
Thu Oct 27 2016 07:00:00
一些東西:
您的輸入是一個非標准格式的字符串。 您可能通過獲取Date
對象並調用.toString()
函數來獲得它,但這並不意味着它適合於按時解析。 如果你查看調試控制台,你會發現一條警告消息,因為你傳入的東西本身並不理解,所以它將它傳遞回Date
構造函數。 請參閱用戶指南 ,該指南說明了在進行自定義輸入時必須傳遞格式說明符。
您的輸入包含時區偏移量+0100
。 這意味着7:00時間是UTC + 1,相當於UTC時間6:00。 這是您第一次使用moment.utc(yourInput)
解析時的值
然后在調用local()
函數時將6:00 UTC轉換回本地時間。 那是你看到的7:00 UTC + 1。
如何解決這個問題取決於你實際想做什么。 你說你預計8:00 UTC,但是你輸入的輸入沒有意義,因為7:00 (+1) == 6:00 (+0)
。
如果你的意思是你想斷言原始時間值確實是UTC,而不是UTC + 1,即使它在你的輸入中,那么提供一個只包含你關心的部分的格式字符串。 Moment的默認松散解析模式將忽略任何無關的東西。
date = 'Thu Oct 27 2016 07:00:00 GMT+0100 (GMT Standard Time)';
moment.utc(date, 'ddd MMM DD YYYY HH:mm:ss').local().format("ddd MMM DD YYYY HH:mm:ss");
換句話說,您的輸入日期僅為Thu Oct 27 2016 07:00:00
,其余部分將被忽略。 您通過將其傳遞到moment.utc
來聲明它是UTC,然后當您將其轉換為本地時,它將在8:00結束。
但是,雖然這就是你要求的,但我的猜測是date
實際上是一個JavaScript Date
對象,其字符串輸出為.toString()
就是你在這里展示的。 在這種情況下, Date
對象已經表示特定的時間點,即UTC時間6:00。 因此,無論你是做moment.utc(date).local()
還是只做moment(date)
都沒關系。 兩者都將在同一時刻留給您,以當地時區為代表。
你可能想回到你的輸入,並在你認為它實際上是一個UTC值時弄清楚你是如何把它包含在GMT+0100
的。 考慮一下,如果您實際上有8:00 UTC,那么您的輸入將是09:00 GMT+0100
。
您可能希望將Moment TimeZone與MomentJS一起使用( http://momentjs.com/timezone/ )
date = moment.tz("Thu Oct 27 2016 07:00:00", "GMT Standard Time");
date.clone().local().format('ddd MMM DD YYYY HH:mm:ss');
編輯:
刪除utc
部分可以在沒有Moment TimeZone的情況下為我修復它:
date = 'Thu Oct 27 2016 07:00:00 GMT+0100 (GMT Standard Time)';
moment(date).local().format('ddd MMM DD YYYY HH:mm:ss');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.