在 EcmaScript 5 中初始化 Date 的正确方法
Correct way to initializa Date in EcmaScript5
在 EcmaScript5 中初始化 Date
的正确方法是什么。
这是我正在尝试做的事情:
//18.02.09 12:00 - 18.02.11 24:00
var StartTime = new Date("2018-02-09T12:00:00.000Z").getTime();
var EndTime = new Date("2018-02-11T23:59:00.000Z").getTime();
我做错了什么?
我正在将笔记本电脑上的时间更改为 2009 年 2 月 18 日 12:01 下午。那我打电话给new Date().now()
。我期望得到一个介于 StartTime
和 EndTime
之间的数字。但是我在两个小时内得到的东西比 StartTime
.
少
诸如“2018-02-09T12:00:00.000Z”之类的字符串是定义日期的标准化方式,由 ISO 8601 给出。
JavaScript 中有多种构造 Date 对象的方法。从 Date MDN docs 中我们可以看出,其中一种方法是提供要解析的字符串。甚至还有一个例子:
var date2 = new Date("1995-12-17T03:24:00");
但你不应该那样做。同一个页面警告说,不推荐通过解析字符串创建日期,因为它依赖于实现(即它可能会根据不同的实现而有所不同)在浏览器上)。
无论如何,值得一提的是,在 ISO 8601 中,以字母 "Z" 结尾的时间戳具有特殊含义 - 它表示不考虑当地时间,日期应被解释为世界标准时间。因此,无论您决定如何构建 Date 对象,都不要忘记决定是要本地化时间戳还是参考 UTC 标准时间。
构造 Date 对象的安全方法是分别提供参数:
new Date(year, month);
new Date(year, month, day);
new Date(year, month, day, hours);
new Date(year, month, day, hours, minutes);
new Date(year, month, day, hours, minutes, seconds);
new Date(year, month, day, hours, minutes, seconds, milliseconds);
您还可以考虑使用一个很棒的库,叫做 MomentJS,在撰写本文时它的大小为 16.3 kB(绝对值得考虑),它非常有名且使用广泛,下载量超过 1200 万每月(在撰写本文时)。
创建日期的方法有很多种,可以传递单个字符串、单个整数或多个参数。最好的方法取决于您的具体情况。
到目前为止,最可靠的方法是使用具有离散值的 Date 构造函数。如果您想为 18.02.09 12:00 创建一个日期,那么假设它是 YY.MM.DD HH:mm 使用:
var d = new Date(2018, 1, 9, 12);
这将在当地时间 2018 年 2 月 9 日中午 12 点创建一个日期,其中 "local" 由主机系统时区偏移量确定。
出于对 Why does Date.parse give incorrect results? 的回答中表达的原因,强烈建议不要将字符串传递给 Date 构造函数,因此不要使用内置解析器,它不可靠,您可能会得到意想不到的结果。
字符串“2018-02-09T12:00:00.000Z”将被视为 UTC,因此从中创建的日期将被主机本地偏移量偏移。使用 UTC 时差将不同于主机时区偏移量在两个日期发生变化的本地时差,例如越过夏令时边界的地方。
所以 "correct" 或 "best" 方式在很大程度上取决于您要尝试做什么、输入值和您希望实现的结果。底线是永远不要使用内置解析器,始终使用定制函数或使用库手动解析字符串。
在 EcmaScript5 中初始化 Date
的正确方法是什么。
这是我正在尝试做的事情:
//18.02.09 12:00 - 18.02.11 24:00
var StartTime = new Date("2018-02-09T12:00:00.000Z").getTime();
var EndTime = new Date("2018-02-11T23:59:00.000Z").getTime();
我做错了什么?
我正在将笔记本电脑上的时间更改为 2009 年 2 月 18 日 12:01 下午。那我打电话给new Date().now()
。我期望得到一个介于 StartTime
和 EndTime
之间的数字。但是我在两个小时内得到的东西比 StartTime
.
诸如“2018-02-09T12:00:00.000Z”之类的字符串是定义日期的标准化方式,由 ISO 8601 给出。
JavaScript 中有多种构造 Date 对象的方法。从 Date MDN docs 中我们可以看出,其中一种方法是提供要解析的字符串。甚至还有一个例子:
var date2 = new Date("1995-12-17T03:24:00");
但你不应该那样做。同一个页面警告说,不推荐通过解析字符串创建日期,因为它依赖于实现(即它可能会根据不同的实现而有所不同)在浏览器上)。
无论如何,值得一提的是,在 ISO 8601 中,以字母 "Z" 结尾的时间戳具有特殊含义 - 它表示不考虑当地时间,日期应被解释为世界标准时间。因此,无论您决定如何构建 Date 对象,都不要忘记决定是要本地化时间戳还是参考 UTC 标准时间。
构造 Date 对象的安全方法是分别提供参数:
new Date(year, month);
new Date(year, month, day);
new Date(year, month, day, hours);
new Date(year, month, day, hours, minutes);
new Date(year, month, day, hours, minutes, seconds);
new Date(year, month, day, hours, minutes, seconds, milliseconds);
您还可以考虑使用一个很棒的库,叫做 MomentJS,在撰写本文时它的大小为 16.3 kB(绝对值得考虑),它非常有名且使用广泛,下载量超过 1200 万每月(在撰写本文时)。
创建日期的方法有很多种,可以传递单个字符串、单个整数或多个参数。最好的方法取决于您的具体情况。
到目前为止,最可靠的方法是使用具有离散值的 Date 构造函数。如果您想为 18.02.09 12:00 创建一个日期,那么假设它是 YY.MM.DD HH:mm 使用:
var d = new Date(2018, 1, 9, 12);
这将在当地时间 2018 年 2 月 9 日中午 12 点创建一个日期,其中 "local" 由主机系统时区偏移量确定。
出于对 Why does Date.parse give incorrect results? 的回答中表达的原因,强烈建议不要将字符串传递给 Date 构造函数,因此不要使用内置解析器,它不可靠,您可能会得到意想不到的结果。
字符串“2018-02-09T12:00:00.000Z”将被视为 UTC,因此从中创建的日期将被主机本地偏移量偏移。使用 UTC 时差将不同于主机时区偏移量在两个日期发生变化的本地时差,例如越过夏令时边界的地方。
所以 "correct" 或 "best" 方式在很大程度上取决于您要尝试做什么、输入值和您希望实现的结果。底线是永远不要使用内置解析器,始终使用定制函数或使用库手动解析字符串。