如何使用DayJS防止日期转换为本地时区

问题描述 投票:0回答:3

我有一个日期字符串

const someDate = 2023-02-13T09:00:00.000-05:00

问题是当我通过 DayJS 格式化它时。

dayjs(someDate).format('h:mm A')

当我需要保持收到的信息时,它会根据我的本地时区返回字符串。

有什么方法可以禁用 DayJS 中将时间转换为本地时区吗?

javascript date time dayjs
3个回答
11
投票

是的!

您可以通过将原始时区作为 dayjs 构造函数中的附加参数传递来禁用在 dayjs 中转换为本地时区。

示例:

const someDate = "2023-02-13T09:00:00.000-05:00";
const originalTimezone = someDate.slice(-6);
const formattedDate = dayjs(someDate).utcOffset(originalTimezone).format('h:mm A');

utcOffset()
方法允许您为特定日期实例设置距 UTC 的分钟偏移量。
originalTimezone
常量用于从原始日期字符串
(-05:00)
中提取时区偏移量
someDate
,并将其传递给
utcOffset()
方法。这将确保格式化的日期保留在原始时区。


3
投票

您可以使用 utc 插件。

import dayjs from "dayjs";
import utc from 'dayjs/plugin/utc';

dayjs.extend(utc)


const dateTime = "2023-02-13T09:00:00.000-05:00";
const value = dayjs.utc(dateTime).format('h:mm A');

console.log(value);

0
投票

我相信最简单的方法是实际提供“输入”和“输出”TZ:

const twoThirtyThreeNoMatterWhat = dayjs('02-05-21 02:33 PM GMT').tz('GMT').format(FMT),

这本质上与@Filip Huhta相同,但不需要解析偏移量——尽管你当然可以对偏移量进行硬编码,以便他的答案变成

const formattedDate = dayjs(someDate).utcOffset('-5:00').format('h:mm A');

这当然很好,尽管它比我的字符多一些。

但重要的是,因为它们都是相同的,所以只要它们相同就没关系。

当然,这只有在您真正控制输入的情况下才有效。比如说,如果您使用已解析的一些文本调用

dayjs
,那么您可以使用您想要的任何确切字符串来调用该函数。我断言“通常”就是这种情况。 我还认为,只有当您实际上

关心时区时,我的策略才有效。由于您想要的格式是 h:mm A 那么我想您只是想让它说

9:00 AM
这就是您所关心的。 (我还断言
this
通常是这种情况😊)

© www.soinside.com 2019 - 2024. All rights reserved.