我有以下代碼:date.setHours(-1)的正確行爲是什麼?
var date = new Date(2010,09,09); //09.10.2010 00:00
date.setHours(-1); //sets the date to 08.10.2010 23:00
前一日(至少對於Opera和Chrome瀏覽器)調用date.setHours(-1);
設定日期至23:00。
這合法嗎?
我有以下代碼:date.setHours(-1)的正確行爲是什麼?
var date = new Date(2010,09,09); //09.10.2010 00:00
date.setHours(-1); //sets the date to 08.10.2010 23:00
前一日(至少對於Opera和Chrome瀏覽器)調用date.setHours(-1);
設定日期至23:00。
這合法嗎?
是的,這實際上是規範要求的,所以如果沒有,這將是一個「非法」實現。
實際計算髮生在MakeDate
。日期轉換爲毫秒,-1小時也是如此。然後添加這些。添加一個負數做減法,所以你得到一個更早的日期。
如果
day
不是有限的或者time
不是有限的,則返回NaN
。返回
day
×msPerDay
+time
。
它不僅是合法的,它是要求。
的行爲在ECMAScript specification正式定義,節15.9.5.34:
Date.prototype.setHours(小時[,分鐘,秒[,毫秒]]])
如果沒有指定分鐘,則表現得好像分鐘被指定爲值
getMinutes()
。如果未指定秒,則此行爲如同秒用值
getSeconds()
指定。如果MS未指定,這個行爲就好像毫秒用價值
getMilliseconds()
規定。
- 讓t是LocalTime(此時間值)的結果。
- 讓h爲ToNumber(小時)。
- 如果未指定分鐘,那麼讓米是MinFromTime(噸);否則,讓m爲ToNumber(分鐘)。
- 如果未指定秒,那麼讓小號是SecFromTime(噸);否則,讓ToDumber(秒)。
- 如果未指定毫秒,那麼讓毫是msFromTime(噸);否則,讓milli爲ToNumber(ms)。
- 讓日期是MAKEDATE(日(噸),MAKETIME(ħ,米,小號,毫))。
- 讓ü是TimeClip(UTC(日期))。
- 將此Date對象的[[PrimitiveValue]]內部屬性設置爲或。
- 返回ù
和說明書用於MakeTime
,在步驟6中使用的,最終計算毫秒通過各部分相乘偏移。對於爭論的界限沒有先決條件(除了它們是有限的),所以負數小時是合法的,並且會導致負面結果。
因此,整體結果,即午夜+(-1小時),確實需要在前一天的23:00才能符合規範。
你是什麼意思與「這是合法的」? – 2012-08-17 12:08:44
這與猜測完全相同。如果我在第二天,一小時前的0:00時,那是第一天23:00。所以對我來說,這似乎是完全合法的。 – 2012-08-17 12:09:06