我正在从 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 来说是不可能的?
您在 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() 确保时区转换发生是正确的
希望有帮助