javascript - 将格式化的日期字符串更新为 UTC 值
问题描述
用户只能提交日期戳的日期部分,例如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”。
推荐阅读
- powershell - 软件版本的 WMIC If / Else 语句
- reactjs - ReactJS 中 JSX 和 Babel 的区别
- android - 导航架构组件:如何从后台堆栈导航片段?
- azure - 如何从同一 ASE 中的 Web 应用调用 Azure ILB ASE 中的 API
- excel - 将 vlookup 结果作为公式参数引用
- java - 实际和预期的字符串具有相同的结果,但测试仍然失败说预期 [true] 但发现 [false]
- python - 如何使用openpyxl将pandas中的数据透视表值(列)写入excel?
- testing - Botium 脚本内存:预期的机器人响应不匹配
- android - Andorid 如何在 Documents 数组中添加值
- c# - 使用 Cropper.js 和 Asp.net 裁剪图像