簡體   English   中英

將日期從具有偏移量的字符串轉換為不同的時區

[英]Converting date from string with offset to different timezone

我想知道將非ISO格式的字符串日期轉換為不同的偏移量/時區的正確方法。

我目前得到3個值:

  • 日期格式為MM / DD / YYYY(23/11/2016)
  • 時間為24小時制(23:13)
  • 時區偏移量(-07:00)

我想將上述日期轉換為用戶的時區。

我正在嘗試將格式轉換為矩時區的moment.tz()函數('2016-11-23T23:13-07:00')接受的格式,但是我不確定如何在不分割日期數組和將其轉換為上述日期。

Moment的時區具有我以后需要將日期轉換為本地時區的工具。 例如:

moment.tz('2016-11-23T23:13-07:00', moment.tz.guess());

關於如何將偏移量-07:00轉換為本地日期(最好使用momentJS)的23/11/2016 23:13的任何想法?

為什么不只將其格式化為具有偏移量的ISO 8601字符串,然后將其提供給moment.js?

 function customToISOString(date, time, offset){ return date.split(/\\D/).reverse().join('-') + 'T' + time + offset; } document.write(customToISOString('23/11/2016','23:13','-07:00')); // 2016-11-23T23:13-07:00 

大多數現代瀏覽器也會對此進行解析,但不要這樣做,因為仍然有很多較舊的瀏覽器會失敗。

我喜歡Rob的回答,但我也會在moment.js中給您答案。

首先,您不需要時區,也絕對不需要猜測時區ID即可轉換為該時區。 在ISO格式中,將如下所示:

var m = moment('2016-11-23T23:13-07:00');

這將在解析期間讀入偏移量,應用偏移量,然后轉換為本地時區,以“本地模式”返回moment對象。 這是默認模式,因此可以正常使用。

根據您所描述的要求,它將是這樣的:

// your inputs
var d = "23/11/2016";
var t = "23:13";
var o = "-07:00";

var m = moment(d + ' ' + t + o, 'MM/DD/YYYY HH:mmZ');

請注意,為安全起見,我在日期和時間之間添加了空格,因此不存在將年份和小時組成部分混合的風險。

再次,它將自動應用偏移量並轉換為本地時區,因為這是默認行為。 如果您想要其他行為,也可以通過其他方式進行。

暫無
暫無

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

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