如何用moment.js获取PST时间?夏令时导致显示PDT问题求助
解决moment-timezone显示PDT而非PST的问题
嘿,这其实是夏令时(Daylight Saving Time)带来的正常现象哦!先给你理清楚其中的逻辑:
- 太平洋标准时间(PST)是冬令时的时区标识,对应UTC-8;
- 太平洋夏令时(PDT)是夏令时的时区标识,对应UTC-7;
- moment-timezone的
America/Los_Angeles时区会根据当前日期自动切换这两个标识,完全符合北美地区的夏令时规则。
你提到“实际PST时间比结果早1小时”,那是因为当前正处于夏令时期间,洛杉矶当地时间确实采用PDT(UTC-7),而PST是冬令时的时间标准,所以你原来的代码输出其实是正确的当地时间。
但如果你的需求是强制显示PST时区(不管当前是否处于夏令时),可以试试下面两种方法:
方法1:固定使用UTC-8偏移量
直接指定UTC-8的偏移,这样时间会始终保持UTC-8(等同于PST),不会随夏令时自动切换:
const momentTz = require('moment-timezone'); const fixedPstTime = momentTz().utcOffset(-8).format("YYYY-MM-DD hh:mm a [PST]"); console.log(fixedPstTime);
这里用[PST]是强制显示固定文本,避免moment自动切换时区标识。
方法2:针对夏令时手动调整(不推荐)
如果你只需要在夏令时期间手动减去1小时,可以先判断当前是否处于夏令时,再做时间调整:
const momentTz = require('moment-timezone'); const laTime = momentTz().tz('America/Los_Angeles'); // 判断当前是否处于夏令时 const isDst = laTime.isDST(); const adjustedTime = isDst ? laTime.subtract(1, 'hour') : laTime; const forcedPst = adjustedTime.format("YYYY-MM-DD hh:mm a [PST]"); console.log(forcedPst);
不过这种方法不够灵活,因为夏令时的起止日期可能会有调整,不如直接用固定偏移量的方案可靠。
最后再提醒下:如果你的需求是获取洛杉矶当地的正确时间,那你原来的代码完全没问题,PDT就是夏令时期间当地的标准时区标识~
内容的提问来源于stack exchange,提问作者shanmugharaj
相关产品推荐
相关产品推荐

