在与我的设备当前不同的时区解析一天的开始会给出意想不到的结果

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

我正在从 moment.js 迁移到 dayjs.js。 我在特定用例中得到了意想不到的结果。

我的设备当前使用“美国/纽约”时区,时间约为 10/22/2024 @ 12:30AM。 这意味着洛杉矶仍然是 21 号。

moment.js :

dateTZ = 'America/Los_Angeles';     
date = moment().tz(dateTZ).startOf('day').format('MMM Do, YYYY [@] h:mm a z');  
console.log(date); // returns 'Oct 21st, 2024 @ 12:00 am PDT' - correct

dayjs.js :

dateTZ = 'America/Los_Angeles'; 
date = dayjs().tz(dateTZ).startOf('day').format('MMM Do, YYYY [@] h:mm a z');   
console.log(date); // returns 'Oct 21st, 2024 @ 6:00 am PDT' - wrong

我已经查看了 dayjs 文档,但没有看到我哪里出错了。 或者也许这对 dayjs 来说是不可能的?

dayjs
1个回答
0
投票

您在 Day.js 中遇到的问题来自其时区处理,因为 Day.js(带时区插件)在内部处理 UTC 时间,这与使用本地时区的 Moment.js 不同

首先确保您已包含 Day.js 的时区和 utc 插件

应用时区后使用 .startOf('day') 来获取目标时区的正确日期

下面是js代码👇

dayjs.extend(window.dayjs_plugin_timezone);
dayjs.extend(window.dayjs_plugin_utc);

let dateTZ = 'America/Los_Angeles';
let date = dayjs().tz(dateTZ).startOf('day').format('MMM Do, YYY[@] h:mm a z');
console.log(date);

这里 .tz() 确保时区转换发生是正确的

希望有帮助

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