gpt4 book ai didi

javascript - 特殊的 JavaScript 日期比较输出

转载 作者:行者123 更新时间:2023-12-02 15:07:16 24 4
gpt4 key购买 nike

有人可以解释为什么从一个 JavaScript 日期减去另一个日期(两个日期都设置为午夜)并不总是返回一致的结果吗?

例如,请参阅以下内容:

// the number of milliseconds in 1 day ...
var msInDay = 1000 * 60 * 60 * 24;

// this line returns 1, as I would expect, as there is 1 day between the 2 dates ...
// (26th March and 27th March)
var days1 = (new Date(2016, 2, 27) - new Date(2016, 2, 26)) / msInDay;

// but this line returns 0.9583333333333334
// (27th March and 28 March)
var days2 = (new Date(2016, 2, 28) - new Date(2016, 2, 27)) / msInDay;

为什么 days2 == 1 不也是这样?

最佳答案

Javascript(实际上是 ECMAScript)日期对象使用 UTC 时间值。使用 Date 构造函数创建日期对象时,创建时间值时会考虑系统时区偏移量,因此它会偏移特定日期的时区偏移量。

如果要计算两个日期之间的天数且没有夏令时误差,请通过直接设置 UTC 时间值来绕过时区偏移,例如

var days = (new Date(Date.UTC(2016, 2, 28)) - new Date(Date.UTC(2016, 2, 27))) / 8.64e7;

document.write(days);

或者,如果夏令时是两个时区之间的唯一差异,则只需对返回值进行舍入即可。

编辑

如果只需要天数差异,则:

(Date.UTC(2016, 2, 28) - Date.UTC(2016, 2, 27)) / 8.64e7

足够了。

PS。像 en-gb 这样的语言指示符不应该用来表示时区。“区域设置”也是不合适的,因为它指的是由地理特征或居住地定义的通常较小的区域,而时区通常是大致基于经度线的非常大的区域,除了它们可能与经度线重合之外,与地理无关。行政边界。

关于javascript - 特殊的 JavaScript 日期比较输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35028259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com