我正在寻找一种在给定日期/时间字符串和时区的情况下构建正确的 Date
对象的方法。
目前,我有一个具有特定偏移量的时区列表,并希望将它们简单地合并在一起,如下所示:
new Date(`${date} ${time} GMT${offset}`);
// new Date('2019-08-30 10:00:00 GMT+0100`);
但是这样做并不关心夏令时,而且我得到了一个日期,该日期是夏季提前一小时。
最佳答案
如果你有偏移量,你可以在 JavaScript date time format 中构建一个字符串并将其与new Date
一起使用。格式如下:2019-08-30T10:00:00+0100
。
看起来您的偏移量
是字符串“+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 是 GMT 09:00:00。
But doing it like this doesn't care about dst and I get an date, which is in the summer one hour ahead.
正确。您需要提供正确的日期偏移量。您的时区列表应该包含 DST 信息(如果没有,则它不完整,而且不幸的是,相当无用)。要正确执行此操作,您需要使用正确的时区数据库,例如 IANA one 。最好的选择不是自己做,而是使用为您做这件事的库,例如 Moment timezone或者您找到的那个,spacetime 。但是,是的,您可以直接使用这些数据库文件,可以通过上面的链接访问它们。但请注意,“BST”(英国夏令时间)或“EDT”(美国东部夏令时间)等常见时区简写术语无论如何都未标准化。 IANA 数据库使用诸如欧洲/伦敦之类的区域(在此处插入英国脱欧笑话)。
关于javascript - 从字符串和时区构建日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57722905/