javascript - 日期-fns |如何格式化为 UTC

标签 javascript date datetime date-fns

问题

看起来当我使用 format() 函数时,它会自动将原始 UTC 时间转换为我的时区 (UTC+8)。我已经研究了他们的文档几个小时,但似乎找不到将其默认为 UTC 时间的方法。

import { parseISO, format } from "date-fns";

const time = "2019-10-25T08:10:00Z";

const parsedTime = parseISO(time);
console.log(parsedTime); // 2019-10-25T08:10:00.000Z

const formattedTime = format(parsedTime, "yyyy-MM-dd kk:mm:ss");
console.log(formattedTime); // 2019-10-25 16:10:00 <-- 8 HOURS OFF!!

我尝试使用包 data-fns-tz 并使用类似的东西

format(parsedTime, "yyyy-MM-dd kk:mm:ss", {timeZone: "UTC"});

仍然没有运气。

请帮忙!

预期输出

2019-10-25 08:10:00

实际输出

2019-10-25 16:10:00

最佳答案

你快到了。这对我有用:

import { parseISO } from "date-fns";
import { format, utcToZonedTime } from "date-fns-tz";

const time = "2019-10-25T08:10:00Z";

const parsedTime = parseISO(time);
console.log(parsedTime); // 2019-10-25T08:10:00.000Z

const formatInTimeZone = (date, fmt, tz) =>
  format(utcToZonedTime(date, tz), 
         fmt, 
         { timeZone: tz });

const formattedTime = formatInTimeZone(parsedTime, "yyyy-MM-dd kk:mm:ss xxx", "UTC");
console.log(formattedTime); // 2019-10-25 08:10:00 +00:00

幕后花絮

date-fns[-tz] 库坚持内置的 Date 数据类型 carries no TZ info .
有些函数将其视为一个时刻,但有些函数(例如 format)将其更像是日历组件的结构 — 2019 年,...,第 25 天,第 08 小时,...

现在的麻烦是 Date 在内部只是一个时刻。它的方法提供了到/从本地时区中的日历组件的映射。

因此,为了表示不同的时区,date-fns-tz/utcToZonedTime 临时生成 Date 实例,表示错误的时间 — 只是为了让它的本地时间日历组件成为我们想要的!

date-fns-tz/format 函数的时区输入影响打印时区的模板字符 (XX..X, xx..x, zz..z, OO..O).

参见 https://github.com/marnusw/date-fns-tz/issues/36对于这种“转移”技术(以及激发他们的实际用例)的一些讨论......
这有点低级且有风险,但我在上面组合它们的具体方式 — formatInTimeZone() — 我相信是一个安全的方法。

关于javascript - 日期-fns |如何格式化为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58561169/

相关文章:

javascript - 带有点、空格和数字的正则表达式 javascript

java - 为什么日期时间的毫秒数 1-1-1970 00 :00:00 is in negative?

ios - 比较当前日期和时间 iOS

java - UTC 给定时区的日期和时间

Javascript getTimezoneOffset 与时刻 utcOffset

java - 如何在 Java 5 中从文本文件中读取时间和日期?

javascript - 获取被点击元素的 id 而无需在 html 中放置任何 js 代码

javascript - 多个 facebook 按钮 (fb :like) are not working: unliking themself

javascript - Wordpress 无法从 ajax 请求中 get_current_user_id()

matlab - 查找事件的平均或中值日期