Node.js:特定时区的日期数学

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

我想找到太平洋时间特定日期的特定时间(假设上午 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
数学。

javascript node.js datetime timezone
2个回答
0
投票

您可以使用

toLocalString
Etc/GMT+8
来固定时区而不保存时间,然后设置小时和分钟:

const pstDate = new Date(
  new Date(new Date('12/13/2025').toLocaleString('en-US', { timeZone: 'Etc/GMT+8' }))
);

pstDate.setHours(
  new Date('12/13/2025').getHours() + 9,
  new Date('12/13/2025').getMinutes() + 30
);

console.log(pstDate - new Date());

-1
投票

只要您知道目标时区(PDT、PST 等),您就可以在 Date 构造函数中指定时区:

let date = "13 Dec 2025"
let targetTime = "09:30:00 PDT"

let localMs  = new Date( )
let targetMs = new Date( `${date} ${targetTime}` )

let diff = targetMs - localMs

console.log( `Diff : ${diff} ms` )
console.log( `Diff : ${diff / 1000} secs` )
console.log( `Diff : ${diff / 1000 / 60} mins` )
console.log( `Diff : ${diff / 1000 / 60 / 60} hours` )

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