javascript - 从字符串和时区构建日期对象

标签 javascript date timezone timezone-offset

我正在寻找一种在给定日期/时间字符串和时区的情况下构建正确的 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/

相关文章:

GWT - 获取浏览器时区/时间戳格式

java - 如何确定日期/时间是 EDT 还是 Java 中的 EST?

mysql - 在 MySQL 中检索客户端时区的自然时间间隔

javascript - 获取类设置为col-md-7但未设置宽度的div的宽度

javascript - 将当前时间设置为默认时间并更新值

mysql - 如何在 MySQL 性能方面明智地组织日历日期的存储

java - 如何检查日期是否属于本周?

javascript - 是什么让 ReactJS 像它声称的那样快?

JavaScript 乘法

Bash 循环获取文件名中的前 12 个字符,使用输出为每个文件运行 touch -t 命令