gpt4 book ai didi

javascript - 将 UTC 转换为新西兰日期的最简单方法(考虑夏令时)?

转载 作者:搜寻专家 更新时间:2023-11-01 04:39:32 26 4
gpt4 key购买 nike

我编写了以下函数,将 msSinceEpoch 转换为新西兰日期(IE11 兼容)...

const MAGICNUMBER = 13;
const toNewZealand = (msSinceEpoch) => {
const [day, month, year, time] = new Date(msSinceEpoch).toLocaleString("en-NZ", {
hour12: false, timeZone: "UTC"
}).split(/[/,]/); // timeZone UTC is the only format support on IE11
const [hours, minutes, seconds] = time.trim().split(":");
return new Date(~~year, ~~month - 1, ~~day, ~~hours + MAGICNUMBER, ~~minutes, ~~seconds)
};

// usage....
console.log(
toNewZealand(new Date().getTime())
)

但是,这包含一个与新西兰夏令时无关的魔数(Magic Number)(+12 或 +13)。

所以这里变得很复杂,我如何获得与新西兰夏令时相关的正确数字(+12 或 +13)。

我最初的尝试只是计算它是在 9 月的最后一个星期日还是 4 月的第一个星期日之间,但后来我意识到第二次我在代码将创建一个相对于他们的系统时间的日期并打破数学。

TL;DR 将自纪元以来的 UTC 毫秒数转换为适用于新西兰夏令时设置的新西兰时间。

编辑:由于包大小成本,也对使用 Moment 或任何其他库来解决此问题不感兴趣。

最佳答案

TL;DR Convert UTC Milliseconds since epoch to New Zealand Time...

我觉得OP对什么是时间转换有误解。 MS Since Epoch总是在 UTC。时间对话改变了时间的显示格式,应该不会改变msSinceEpoch

您可以使用 toLocalString() 并传递所需的时区(太平洋/奥克兰)来转换您的 DateTime 的显示格式:

const date = new Date();
console.log(
date.toLocaleString('en-NZ', {
timeZone: 'Pacific/Auckland',
}),
);

关于javascript - 将 UTC 转换为新西兰日期的最简单方法(考虑夏令时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52106990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com