从字符串和时区构建Date对象

时间:2019-08-30 08:06:27

标签: javascript date timezone timezone-offset

我正在寻找一种在给定日期/时间字符串和时区的情况下构建正确的usw1-az2对象的方法。

目前,我有一个带有特定偏移量的时区列表,并希望将它们像这样简单地合并在一起:

Date

但是这样做并不影响夏令时,我得到了一个约会,那是夏天的一个小时。

1 个答案:

答案 0 :(得分:2)

如果有偏移量,则可以在JavaScript date time format中建立一个字符串,并将其与new Date一起使用。格式如下:2019-08-30T10:00:00+0100

看起来您的offset是字符串"+0100"。如果是这样:

new Date(`${date}T${time}${offset}`);

实时示例:

const date = "2019-08-30";
const time = "10:00:00";
const offset = "+0100";

const dt = new Date(`${date}T${time}${offset}`);
console.log("toISOString:", dt.toISOString());
console.log("toLocaleString", dt.toLocaleString());

在我使用Chrome(V8)的时区(英国夏令时,GMT + 0100)中,输出:

toISOString: 2019-08-30T09:00:00.000Z
toLocaleString 30/08/2019, 10:00:00

...这很有意义,BST 10:00:00是格林尼治标准时间09:00:00。

  

但是这样做并不影响夏令时,我得到了一个约会,那是夏天的一个小时。

正确。您需要提供日期的正确偏移量。您的时区列表应包含DST信息(如果没有,则不完整,并且很遗憾,它毫无用处)。为此,您需要使用正确的时区数据库,例如IANA one。最好的选择不是自己做,而是使用一个为您完成任务的库,例如Moment timezone或您找到的库spacetime。但是可以,您可以直接使用这些数据库文件,可以从上面的链接访问它们。但是请注意,常见的时区速记术语,例如“ BST”(对于英国夏令时)或“ EDT”(对于美国东部夏令时),在任何方面都没有标准化。 IANA数据库使用Europe/London (在此处插入Brexit笑话)之类的区域。