我有一个日期字符串
const someDate = 2023-02-13T09:00:00.000-05:00
问题是当我通过 DayJS 格式化它时。
dayjs(someDate).format('h:mm A')
当我需要保持收到的信息时,它会根据我的本地时区返回字符串。
有什么方法可以禁用 DayJS 中将时间转换为本地时区吗?
是的!
您可以通过将原始时区作为 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()
方法。这将确保格式化的日期保留在原始时区。
您可以使用 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);
我相信最简单的方法是实际提供“输入”和“输出”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通常是这种情况😊)