You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS获取月初日期时月份编号返回异常的问题求助

JavaScript月初日期getMonth()返回上月值的问题分析与解决

问题原因

当使用YYYY-MM-DD格式的字符串创建Date对象时,JavaScript默认会以UTC时区解析该日期,但getMonth()方法是基于本地时区返回月份索引的。如果你的本地时区处于UTC以西(例如中国时区为UTC+8),那么2023-01-01的UTC时间对应本地时区的实际时间是2022-12-31,因此getMonth()会返回11(对应12月的索引);而2023-01-02的UTC时间对应本地时区的凌晨时段,日期仍在1月,所以能正确返回0。HTML的date类型输入框返回的字符串同样是YYYY-MM-DD格式,因此会触发相同问题。

解决方法

方法1:使用UTC时区的月份获取方法

直接用getUTCMonth()替代getMonth(),该方法基于UTC时区返回月份索引,不受本地时区影响:

const date = "2023-01-01";
console.log(new Date(date).getUTCMonth()); // 输出0

方法2:强制按本地时区解析日期

在日期字符串末尾添加T00:00:00,让JavaScript以本地时区解析该日期:

const date = "2023-01-01";
const localDate = new Date(`${date}T00:00:00`);
console.log(localDate.getMonth()); // 输出0

方法3:手动拆分日期构建Date对象

拆分日期字符串提取年、月、日,直接通过Date构造函数创建本地时区的日期对象(注意构造函数的月份参数为0索引,需要将提取的月份值减1):

const dateStr = "2023-01-01";
const [year, month, day] = dateStr.split("-").map(Number);
const date = new Date(year, month - 1, day);
console.log(date.getMonth()); // 输出0

内容的提问来源于stack exchange,提问作者User123123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:40:44