JavaScript的Date对象set方法直接修改原对象,支持年月日时分秒毫秒设置,月份从0开始,越界值自动归一化,本地时区操作;UTC操作需用setUTC系列方法。

JavaScript 的 Date 对象提供了一系列 set* 方法,用于修改日期对象中特定的时间字段(如年、月、日、时、分、秒、毫秒),所有操作都会**直接修改原对象**,不返回新对象。
常用 set 方法及对应字段
每个 set 方法接收一个数值参数,代表要设置的目标值。注意部分方法的取值范围有特殊规则:
-
setFullYear(year, month?, date?):设置年份(4位)、可选月份(0–11)、可选日期(1–31)。推荐用这个代替过时的setYear()。 -
setMonth(month, date?):设置月份(0 起始,即 0=1月,11=12月);第二个参数可同时设置当月几号。 -
setDate(date):设置月份中的第几天(1–31,超出会自动进位/借位,例如 32 会变成下月2日)。 -
setHours(hours, minutes?, seconds?, ms?):设置小时(0–23),后三个参数可选,分别对应分钟、秒、毫秒。 -
setMinutes(minutes, seconds?, ms?):设置分钟(0–59),支持连带设置秒和毫秒。 -
setSeconds(seconds, ms?):设置秒(0–59),第二个参数可设毫秒。 -
setMilliseconds(ms):设置毫秒(0–999)。
注意月份从 0 开始
这是最容易出错的地方。例如想把日期设为 2025 年 5 月 10 日,不能写 date.setMonth(5),而要写 date.setMonth(4):
const d = new Date('2024-01-01');
d.setMonth(4); // → 2024年5月1日(不是6月)
d.setDate(10); // → 2024年5月10日
超出范围的值会自动归一化
JavaScript 会智能处理越界值,无需手动校验:
立即学习“Java免费学习笔记(深入)”;
-
setDate(32)在 1 月会变成 2 月 1 日; -
setMonth(15)相当于加 3 年 3 个月(15 % 12 = 3,年份 + Math.floor(15/12)); -
setHours(25)会变成次日 1 点。
时区相关说明
所有 set* 方法(如 setHours)操作的都是**本地时区**的时间。如果需要操作 UTC 时间,对应使用 setUTC* 系列方法,例如:setUTCHours()、setUTCDate() 等。两者修改的是同一时间戳,只是解释方式不同。


















