如何将日期时间从 ISO 格式转换为 UTC 时区?
How to convert date time from ISO Format to UTC time zone?
我正在使用 moment.js
,我想将 ISO 格式的日期时间转换为 UTC 时区。
我可以从本地时间转换成UTC+ISO格式,但我无法将ISO格式转换成UTC时区。
输入:
2018-03-22T00:00:00Z
预期输出:
日期应为 UTC 时区。如果我计算它应该是:
22018-03-21T18:30:00Z
- 首先我想转换成ISO,然后转换成UTC**。
无法将本地日期时间转换为 ISO 然后是 UTC
我们可以转换成字符串,但是从ISO格式可以转换吗?
Fox 示例: 我想将 ISODATE(2018-03-22T00:00:00Z)
转换为 UTC 时区。
function toISO(dt) {
return moment(dt).format("YYYY-MM-DDTHH:mm:ss") + "Z";
}
var date = new Date();
var isoDate= toISO(date)
直接我们可以转换
function toISOWithUtc(dt) {
return moment(dt).utc().format("YYYY-MM-DDTHH:mm:ss") + "Z";
}
var date = new Date();
toISO(date)
2018-03-22T00:00:00Z
和 2018-03-21T18:30:00Z
都已经是 UTC.
注意最后的Z
了吗? This means that the date is in UTC。这不是您可以直接附加到末尾的硬编码字母 - 它具有特定含义,它表明 date/time 在 UTC 中。
如果您想将该 UTC 日期转换为另一个时区(我猜这就是您想要的),您可以使用 moment.tz:
// convert UTC 2018-03-22T00:00:00Z to Asia/Kolkata timezone
moment.tz('2018-03-22T00:00:00Z','Asia/Kolkata')
只需将时区名称更改为您要转换的名称即可。
然后调用 format()
将为您提供 ISO8601 格式的转换后 date/time:
moment.tz('2018-03-22T00:00:00Z','Asia/Kolkata').format() // 2018-03-22T05:30:00+05:30
请注意,偏移量从 Z
更改为 +05:30
。这意味着上面的 date/time 比 UTC 提前 5 小时 30 分钟,这是将 2018-03-22T00:00:00Z
转换为加尔各答时区的结果。
注意:我认为你误解了这里的概念。
UTC is a time standard. It defines things like the current date/time accross the world, it uses atomic clocks to make sure everybody on Earth are synchronized, and timezones are all based on offsets from UTC.
ISO8601 is a standard for exchanging date/time-related data。它定义了 formats(日期的文本表示)。 date/time 可以是 ISO 格式,不管是不是 UTC 格式。
这就是为什么 "convert from UTC to ISO"(或 vice-versa)完全没有意义。
我正在使用 moment.js
,我想将 ISO 格式的日期时间转换为 UTC 时区。
我可以从本地时间转换成UTC+ISO格式,但我无法将ISO格式转换成UTC时区。
输入:
2018-03-22T00:00:00Z
预期输出:
日期应为 UTC 时区。如果我计算它应该是:
22018-03-21T18:30:00Z
- 首先我想转换成ISO,然后转换成UTC**。
无法将本地日期时间转换为 ISO 然后是 UTC
我们可以转换成字符串,但是从ISO格式可以转换吗?
Fox 示例: 我想将 ISODATE(2018-03-22T00:00:00Z)
转换为 UTC 时区。
function toISO(dt) {
return moment(dt).format("YYYY-MM-DDTHH:mm:ss") + "Z";
}
var date = new Date();
var isoDate= toISO(date)
直接我们可以转换
function toISOWithUtc(dt) {
return moment(dt).utc().format("YYYY-MM-DDTHH:mm:ss") + "Z";
}
var date = new Date();
toISO(date)
2018-03-22T00:00:00Z
和 2018-03-21T18:30:00Z
都已经是 UTC.
注意最后的Z
了吗? This means that the date is in UTC。这不是您可以直接附加到末尾的硬编码字母 - 它具有特定含义,它表明 date/time 在 UTC 中。
如果您想将该 UTC 日期转换为另一个时区(我猜这就是您想要的),您可以使用 moment.tz:
// convert UTC 2018-03-22T00:00:00Z to Asia/Kolkata timezone
moment.tz('2018-03-22T00:00:00Z','Asia/Kolkata')
只需将时区名称更改为您要转换的名称即可。
然后调用 format()
将为您提供 ISO8601 格式的转换后 date/time:
moment.tz('2018-03-22T00:00:00Z','Asia/Kolkata').format() // 2018-03-22T05:30:00+05:30
请注意,偏移量从 Z
更改为 +05:30
。这意味着上面的 date/time 比 UTC 提前 5 小时 30 分钟,这是将 2018-03-22T00:00:00Z
转换为加尔各答时区的结果。
注意:我认为你误解了这里的概念。
UTC is a time standard. It defines things like the current date/time accross the world, it uses atomic clocks to make sure everybody on Earth are synchronized, and timezones are all based on offsets from UTC.
ISO8601 is a standard for exchanging date/time-related data。它定义了 formats(日期的文本表示)。 date/time 可以是 ISO 格式,不管是不是 UTC 格式。
这就是为什么 "convert from UTC to ISO"(或 vice-versa)完全没有意义。