【问题标题】:Display UTC string with date-fns使用 date-fns 显示 UTC 字符串
【发布时间】:2020-08-05 08:47:13
【问题描述】:

我有一个代表 ISO UTC 日期的字符串:2020-06-08T04:00:00.000Z(UTC 7 月 8 日凌晨 4 点)。

我从中创建了一个date-fns 对象,以便我可以根据需要格式化显示的字符串。所以我继续如下:

const localDate = parseISO('2020-06-08T04:00:00.000Z');
const formattedDateString = format(localDate, 'MMMM dd, yyyy, EEEE, hh:mm aaa');

但是 formattedDateString 以当地时间显示(假设您的浏览器位于 UTC 前 1 小时的时区,它显示 ...05 AM),但我需要显示 UTC 时间(无论浏览器的时区如何),即 ... 4 AM。我该怎么做?

注意:... 表示省略以保持示例清晰

【问题讨论】:

  • 您可以在这里找到尝试的变体stackoverflow.com/questions/2891361/…
  • @PeteKelley,谢谢,但我特别需要 Javascript 库 date-fns
  • date-fns 文档中有一个与时区相关的文档,它应该涵盖您要查找的内容:date-fns.org/v2.12.0/docs/Time-Zones
  • 本地时间似乎是默认时间,要切换到 UTC,您需要 do it yourself
  • 这是我的想法之一,但date-fns-tz 库需要第二个参数时区,所以如果你像Europe/London 这样传递某事,它会部分(!!!)到工作(当英国在夏季/冬季时间切换期间偏离 UTC),因此我们再次面临一年中使用这种方法的 1 小时休息时间。除非有“UTC”参数,但我找不到任何涉及此类的文档

标签: javascript date-fns


【解决方案1】:

我最终添加了 date-fns-tz 库并这样做:

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

const localDate = parseISO('2020-06-08T04:00:00.000Z');
const convertedDate = isLocalTime ? localDate : utcToZonedTime(localDate, 'UTC');
const formattedDateString = isLocalTime
    ? format(convertedDate, 'MMMM dd, yyyy, EEEE, hh:mm aaa EEEE')      // June 08, 2020, Monday, 06:00 AM, GMT+02:00
    : `${format(convertedDate, 'MMMM dd, yyyy, EEEE, hh:mm aaa')} UTC`; // June 08, 2020, Monday, 04:00 AM, UTC

免责声明:我没有发现 utcToZonedTimeUTC 参数的使用记录(这可能不是推荐的方式,或者只是我在库文档中找不到它)。

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 2020-09-30
    • 2021-08-01
    • 2021-03-28
    • 2021-01-17
    • 2021-09-17
    • 2021-11-13
    • 2021-06-28
    • 2020-05-10
    相关资源
    最近更新 更多