将格式化日期字符串更新为 UTC 值
Update formatted date string to UTC value
用户只能提交日期戳的日期部分,例如2020-12-01
,假设时间会是00:00:00
因此,如果我有上述值,我想将时间更新为其 UTC 值。因此,如果我在 EST 时区,我想将 2020-12-01
转换为 2020-12-01 05:00:00
以解决五个小时的偏移量。
我可以用 date-fns-tz
做这个吗?
const { zonedTimeToUtc, format } = require("date-fns-tz");
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
const utcDate = zonedTimeToUtc(new Date("2020-12-01"), tz);
document.getElementById("app").innerHTML = `${format(
utcDate,
"yyyy-MM-dd HH:mm:ss"
)}
`;
以上结果 2020-11-30 19:00:00
,将时间向错误的方向移动了 5 小时。
https://codesandbox.io/s/happy-hoover-dn417?file=/src/index.js:23-301
鉴于:
const utcDate = zonedTimeToUtc(new Date("2020-12-01"), tz);
内置解析器将用于解析字符串,因此它将被解析为 UTC,然后 date-fns 将应用 tz 的偏移量。不要那样做,使用:
const utcDate = zonedTimeToUtc("2020-12-01", tz);
以便 date-fns 使用 tz 解析字符串。现在 utcDate.toISOString()
生成“2020-12-01T05:00:00.000Z”,这是等效的 UTC 日期和时间,其中 tz 是 America/New_York.
Date-fns 似乎总是使用主机时区偏移量进行输出,timeZone 选项只是更改文本偏移量,它不会修改实际的时间戳值。可能您必须先使用 utcToZonedTime 来调整日期。我在 date-fns 上苦苦挣扎,我发现文档严重缺乏有用的示例。
我只使用 toISOString 并删除“T”和“Z”。
用户只能提交日期戳的日期部分,例如2020-12-01
,假设时间会是00:00:00
因此,如果我有上述值,我想将时间更新为其 UTC 值。因此,如果我在 EST 时区,我想将 2020-12-01
转换为 2020-12-01 05:00:00
以解决五个小时的偏移量。
我可以用 date-fns-tz
做这个吗?
const { zonedTimeToUtc, format } = require("date-fns-tz");
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
const utcDate = zonedTimeToUtc(new Date("2020-12-01"), tz);
document.getElementById("app").innerHTML = `${format(
utcDate,
"yyyy-MM-dd HH:mm:ss"
)}
`;
以上结果 2020-11-30 19:00:00
,将时间向错误的方向移动了 5 小时。
https://codesandbox.io/s/happy-hoover-dn417?file=/src/index.js:23-301
鉴于:
const utcDate = zonedTimeToUtc(new Date("2020-12-01"), tz);
内置解析器将用于解析字符串,因此它将被解析为 UTC,然后 date-fns 将应用 tz 的偏移量。不要那样做,使用:
const utcDate = zonedTimeToUtc("2020-12-01", tz);
以便 date-fns 使用 tz 解析字符串。现在 utcDate.toISOString()
生成“2020-12-01T05:00:00.000Z”,这是等效的 UTC 日期和时间,其中 tz 是 America/New_York.
Date-fns 似乎总是使用主机时区偏移量进行输出,timeZone 选项只是更改文本偏移量,它不会修改实际的时间戳值。可能您必须先使用 utcToZonedTime 来调整日期。我在 date-fns 上苦苦挣扎,我发现文档严重缺乏有用的示例。
我只使用 toISOString 并删除“T”和“Z”。