Date.prototype.setHours()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Date 實例的 setHours() 方法會根據本地時間變更此日期的時、分、秒和/或毫秒。

嘗試一下

const event = new Date("August 19, 1975 23:15:30");
event.setHours(20);

console.log(event);
// 預期輸出:「Tue Aug 19 1975 20:15:30 GMT+0200 (CEST)」
// 備註:你的時區可能會有所不同

event.setHours(20, 21, 22);

console.log(event);
// 預期輸出:「Tue Aug 19 1975 20:21:22 GMT+0200 (CEST)」

語法

js
setHours(hoursValue)
setHours(hoursValue, minutesValue)
setHours(hoursValue, minutesValue, secondsValue)
setHours(hoursValue, minutesValue, secondsValue, msValue)

參數

hoursValue

一個介於 0 到 23 之間的整數,表示小時。

minutesValue 選擇性

一個介於 0 到 59 之間的整數,表示分鐘。

secondsValue 選擇性

一個介於 0 到 59 之間的整數,表示秒。如果你指定了 secondsValue,則也必須指定 minutesValue

msValue 選擇性

一個介於 0 到 999 之間的整數,表示毫秒。如果你指定了 msValue,則也必須指定 minutesValuesecondsValue

回傳值

會就地變更 Date 物件,並回傳其新的時間戳。如果參數為 NaN(或其他會被強制轉換NaN 的值,例如 undefined),日期會被設為無效日期並回傳 NaN

描述

如果你沒有指定 minutesValuesecondsValuemsValue 參數,將會使用 getMinutes()getSeconds()getMilliseconds() 所回傳的相同值。

如果你指定的參數超出預期範圍,Date 物件中的其他參數和日期訊息也會相應地更新。例如,如果你為 secondsValue 指定 100,分鐘數將會增加 1(minutesValue + 1),而秒數則會使用 40。

因為 setHours() 是根據本地時間運作,跨越日光節約時間(Daylight Saving Time,DST)邊界可能會導致與預期不同的經過時間。例如,如果設定的小時數跨越了春季快轉轉換(少了一小時),新舊日期之間的時間戳差異將比名目上的一小時差異少一小時。相反地,跨越秋季倒退轉換(多了一小時)則會導致多出一小時。如果你需要按固定的時間量調整日期,請考慮使用 setUTCHours()setTime()

如果新的本地時間落在時區偏移轉換期間,確切的時間會使用與 Temporaldisambiguation: "compatible" 選項相同的行為來推導。也就是說,如果本地時間對應到兩個瞬間,會選擇較早的一個;如果本地時間不存在(有間隙),我們會前進間隙的持續時間。

範例

使用 setHours()

js
const theBigDay = new Date();
theBigDay.setHours(7);

規範

Specification
ECMAScript® 2026 Language Specification
# sec-date.prototype.sethours

瀏覽器相容性

參見