JavaScript原生Date对象适合基础操作,但跨月计算、时区处理等需注意getMonth()(0–11)、getDay()(0=周日)、getTimezoneOffset()(东八区为-480)等陷阱;推荐用溢出机制加减、new Date(year, month, day)构造本地日期、Date.UTC()获取UTC时间,复杂场景引入date-fns或luxon。
JavaScript的Date对象提供了一套基础方法,但处理复杂日期逻辑(如跨月计算、时区转换、工作日判断、相对日期)时,原生API往往不够直观或容易出错。关键在于:先掌握核心方法的用途和陷阱,再用合理策略补足短板。
这些是日常最常调用的方法,但多数返回数值或字符串,不直接修改原Date对象(除set类方法外):
) / getDate():获取年、月(注意:0–11)、日;getMonth()易错,需+1才得自然月
避免手动计算天数(如“30天后”在2月会出错),改用Date对象的“溢出机制”:
date.setDate(date.getDate() + 7)
date.setMonth(date.getMonth() + 1),再用getDate()检查是否回退(如1月31日加1个月可能得3月3日,可按需截断为当月最后日)new Date(year, month, day)构造新实例,而非复用set方法链(避免隐式修改)JavaScript Date内部始终是UTC毫秒数,显示时才按本地时区解释。常见误区:
new Date('2025-01-01')被解析为UTC时间(相当于本地时区的前一日傍晚),而new Date('2025/01/01')按本地时区解析new Date(year, monthIndex, day)构造new Date(Date.UTC(year, month, day)),或确保字符串含时区(如'2025-01-01T00:00:00Z')不强求纯原生实现所有功能,可组合使用:
(date2 - date1) / (1000 * 60 * 60 * 24),注意结果为浮点数,需Math.floor或Math.round按需取整date.getDay()判断),注意起止日是否包含