我想找到太平洋时间特定日期的特定时间(假设上午 9:30)的时间偏移,而我的程序可能正在其他一些区域设置中运行。这行不通:
const targetdate = '12/13/2025';
const target = new Date(targetdate);
target.setHours(9, 30); // won't work, uses local time zone
const timeDelta = target - new Date();
因为
setHours
使用当地时区而不是太平洋时区。
以下方法半年也不起作用:
const PST_offset = 7; // won't work if target date is DST
target.setUTCHours(9 + PST_offset, 30);
因为夏令时期间与 UTC 的偏移量不同。
有什么方法可以告诉 Node 使用 Pacific 作为其语言环境吗?我也知道
Intl.DateTimeFormat
,但这与显示日期和时间有关,而不是Date
数学。
仅从 UTC 偏移到太平洋时间并非易事,因为相关日期可能采用太平洋夏令时 (UTC-7) 或太平洋标准时间 (UTC-8),具体取决于相关
targetdate
。我想我可以计算出日期属于哪一个,如果规则不是太神秘的话,但这是否已经以某种更优雅的方式解决了?
事实证明,你可以告诉 Node 你的语言环境是一个特定的时区,如下所示:
process.env.TZ = 'America/Los_Angeles';
所以上面的代码片段就变成了这样,它按预期工作:
process.env.TZ = 'America/Los_Angeles';
const targetdate = '12/13/2025';
const target = new Date(targetdate);
target.setHours(9, 30); // 9:30am PDT or PST as appropriate
const timeDelta = target - new Date();
您可以使用
toLocalString
和 Etc/GMT+8
来固定时区而不保存时间,然后设置小时和分钟:
// this gives you a timestamp for the given date at midnight in GMT+8
const pstDate = new Date(
new Date(new Date('12/13/2025').toLocaleString('en-US', { timeZone: 'Etc/GMT+8' }))
);
// now add 9:30 on top of that if you want that time in GMT+8
pstDate.setHours(
new Date('12/13/2025').getHours() + 9,
new Date('12/13/2025').getMinutes() + 30
);
console.log(pstDate - new Date());