Momentjs在所有时区显示相同的日期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Momentjs在所有时区显示相同的日期相关的知识,希望对你有一定的参考价值。
我正在尝试使用momentjs通过用户的浏览器转换DateTime。
这里发生了什么:
let timezone = moment.tz.guess();
console.log('timezone:', timezone);
let iso_date = moment('06-04-2020 12:22:05 PM', 'MM-D-YYYY hh:mm:ss A').toISOString();
console.log('iso_date:', iso_date)
console.log('from timezone:', moment(iso_date).tz(timezone).format('lll'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.31/moment-timezone-with-data.min.js"></script>
我想根据用户的浏览器转换日期时间。但是,无论我尝试什么,我都会得到相同的日期时间,而无需进行更改。如何获得不同时区的不同日期时间?
Inputted date: 06-04-2020 12:22:05 PM', 'MM-D-YYYY hh:mm:ss A
Inputted timezone: America/Los_Angeles
Expected Output: Jun 4, 2020 12:22 PM
Inputted date: 06-04-2020 12:22:05 PM', 'MM-D-YYYY hh:mm:ss A
Inputted timezone: Asia/Calcutta
Expected Output: Jun 5, 2020 12:52 AM
这是怎么回事。
let iso_date = moment('06-04-2020 12:22:05 PM', 'MM-D-YYYY hh:mm:ss A').toISOString();
[从'06 -04-2020 12:22:05 PM创建日期,将值视为本地,然后为该日期的UTC版本返回ISO 8601字符串,例如2020-06-04T06:52:05Z。
console.log('from var:', moment(iso_date).tz(timezone).format('lll'));
采用ISO格式的字符串并将其解析为UTC,然后为本地时区创建时间戳。因此它应该产生与原始时间戳相同的日期和时间。
所有代码所做的就是将时间戳解析为本地时间戳,生成等效的UTC时间戳,然后通过将UTC时间戳转换为本地时间戳来逆转该过程。
如何获得不同时区的不同日期时间?
使用其他位置进行解析和格式化。如果您对两者使用相同的位置,或使用具有相同偏移量的位置,那么您将获得相同的日期和时间。它与执行操作完全相同:
let s = 'Fri Jun 05 2020 10:41:25';
let d = new Date(s);
let utc = d.toISOString();
console.log(
'Started with : ' + s +
'\nConverted to : ' + utc +
'\nBack to local: ' + new Date(utc).toString()
);
以上是关于Momentjs在所有时区显示相同的日期的主要内容,如果未能解决你的问题,请参考以下文章