gpt4 book ai didi

javascript - date.setHours(-1) 的正确行为是什么?

转载 作者:行者123 更新时间:2023-11-30 07:43:19 26 4
gpt4 key购买 nike

我有以下代码:

var date = new Date(2010,09,09); //09.10.2010 00:00
date.setHours(-1); //sets the date to 08.10.2010 23:00

调用 date.setHours(-1); 将日期设置为前一天的 23:00(至少对于 Opera 和 Chrome)。

这合法吗?

最佳答案

不仅合法,而且必需

该行为在 ECMAScript specification 中正式定义, 第 15.9.5.34 节:

Date.prototype.setHours (hour [, min [, sec [, ms ] ] ] )

If min is not specified, this behaves as if min were specified with the value getMinutes().

If sec is not specified, this behaves as if sec were specified with the value getSeconds().

If ms is not specified, this behaves as if ms were specified with the value getMilliseconds().

  1. Let t be the result of LocalTime(this time value).
  2. Let h be ToNumber(hour).
  3. If min is not specified, then let m be MinFromTime(t); otherwise, let m be ToNumber(min).
  4. If sec is not specified, then let s be SecFromTime(t); otherwise, let s be ToNumber(sec).
  5. If ms is not specified, then let milli be msFromTime(t); otherwise, let milli be ToNumber(ms).
  6. Let date be MakeDate(Day(t), MakeTime(h, m, s, milli)).
  7. Let u be TimeClip(UTC(date)).
  8. Set the [[PrimitiveValue]] internal property of this Date object to u.
  9. Return u

第 6 步中使用的 MakeTime 规范最终通过将各个部分相乘来计算毫秒偏移量。参数的界限没有先决条件(除了它们是有限的),所以负数的小时数是合法的,并且会导致负结果。

因此,总体结果(即午夜 +(-1 小时))确实需要前一天的 23:00 才能符合规范。

关于javascript - date.setHours(-1) 的正确行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12005476/

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