【发布时间】:2021-03-01 19:13:06
【问题描述】:
我必须将给定时区、年、月、日、小时和分钟的日期时间转换为 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 方法很容易地以相反的方式执行此操作,但是这样我找不到合适的解决方案...
如果我忽略了任何信息来源,请告诉我。
编辑(见 cmets):
使用时区而不是 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 功能。
【问题讨论】:
-
Date 原型上的所有 UTC 方法怎么样?还有
.toUTCString()? -
我无法使用此方法,因为我无法设置时区。执行此代码的服务器为 UTC 0,因此任何“new Date()”指令都将返回未转换的日期时间。我将得到一个未移位的 ISO 字符串(例如:2020-11-18T14:44:00.000Z 而不是 2020-11-18T13:44:00.000Z)
-
你的问题说你有时区信息(“欧洲/巴黎”)。
-
如果您可以将字符串时区信息映射到偏移量,您可以构建自己的包含偏移量的 ISO 字符串。然后就可以提取构造好的UTC版本了。
-
这正是我的观点。使用 timeZone 而不是 GMT 字符串(例如 GMT +01:00)的好处是我不必处理时间更改。您可能知道,时区“欧洲/巴黎”在冬天是 GMT +1,但在夏天是 GMT +2……而且我找不到将时区映射到任何偏移量的正确方法
标签: javascript datetime timezone datetime-conversion