Date.prototype.setHours()

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

setHours() 方法用于修改 Date 实例的小时、分钟、秒和/或毫秒,这些修改根据本地时间进行。

试一试

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

console.log(event);
// Expected output: "Tue Aug 19 1975 20:15:30 GMT+0200 (CEST)"
// Note: your timezone may vary

event.setHours(20, 21, 22);

console.log(event);
// Expected output: "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() 操作的是本地时间,因此跨越夏令时 (DST) 边界可能会导致实际经过时间与预期不同。例如,如果设置小时的时间点恰好是春季向前调整(省略一小时),则新旧日期之间的时间戳差异会比名义上的小时差异少一个小时。反之,如果是秋季向后调整(增加一小时),则会多出一个小时。如果您需要按固定时间量调整日期,请考虑使用 setUTCHours()setTime()

如果新的本地时间落在偏移量转换范围内,则确切时间将使用与 Temporaldisambiguation: "compatible" 选项相同的行为来确定。也就是说,如果本地时间对应两个瞬间,则选择较早的那个;如果本地时间不存在(存在间隙),则向前推进间隙持续的时间。

示例

使用 setHours()

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

规范

规范
ECMAScript® 2026 语言规范
# sec-date.prototype.sethours

浏览器兼容性

另见