[英]Converting date from string with offset to different timezone
我想知道將非ISO格式的字符串日期轉換為不同的偏移量/時區的正確方法。
我目前得到3個值:
我想將上述日期轉換為用戶的時區。
我正在嘗試將格式轉換為矩時區的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.