我必须将日期时间(给定时区、年、月、日、小时和分钟)转换为 ISO 字符串。
例如,给定以下参数:
{
timeZone: 'Europe/Paris',
year: 2020,
month: 11,
day: 18,
hours: 14,
minutes: 44,
}
我想构建对应的 ISO 字符串:2020-11-18T13:44:00.000Z
(注意那里的时差)
您可以通过 Intl.DateTimeFormat
或 toLocaleDateString
/toLocaleTimeString
方法轻松地完成此操作,但这我找不到合适的解决方案的方式...
如果我遗漏了任何信息来源,请告诉我。
编辑(见评论):
使用时区而不是 GMT 字符串(例如 'GMT +01:00'
)的好处是我不必处理时间变化。您可能知道,冬季时区 'Europe/Paris'
是 'GMT +01:00'
而 'GMT +022:00'
在夏天...而且我找不到将时区映射到任何 UTC 偏移量的正确方法
预先感谢您的帮助
解决方案:
如下所示,使用 Luxon 我们可以做到
const timeObject = { day, month, year, hours, minutes, zone: timeZone };
const date = DateTime.fromObject(timeObject).toUTC().toString();
Matt 还建议了现在的实验性 Temporal功能。
最佳答案
当 Temporal在你的浏览器引擎中可用(或者如果你使用 polyfill )那么就这样做:
Temporal.ZonedDateTime.from({
timeZone: 'Europe/Paris',
year: 2020,
month: 11,
day: 18,
hour: 14,
minute: 44,
}).toInstant().toString();
// => '2020-11-18T13:44:00Z'
关于Javascript - 将知道其时区的日期时间转换为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64894427/