JavaScript获取当月首日日期结果不一致的原因咨询
日期输出差异的原因分析
核心问题:时区不匹配
你的代码里的toISOString()方法会强制把日期转换为UTC标准时区的字符串,但本地运行环境使用的是本地时区(比如国内常用的UTC+8东八区),两者的时间差导致了日期显示偏差:
- 当本地时区创建当月第一天的日期(例如
2023-02-01 00:00:00),对应的UTC时间其实是前一天的2023-01-31 16:00:00,用slice(0,10)截取ISO字符串自然会得到2023-01-31。 - 在线编译器的运行时区默认是UTC,所以生成的日期转成ISO字符串后就是预期的当月第一天。
解决方法
直接绕开时区转换的问题,用本地时区的日期方法拼接正确格式:
let date = new Date(); let year = date.getFullYear(); // 月份从0开始计数,需加1后补零确保两位格式 let month = String(date.getMonth() + 1).padStart(2, '0'); let first_date = `${year}-${month}-01`; console.log(first_date);
或者用本地化日期方法处理(需注意浏览器兼容性):
let firstDateObj = new Date(date.getFullYear(), date.getMonth(), 1); let first_date = firstDateObj.toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' }).replace(/\//g, '-'); console.log(first_date);
内容的提问来源于stack exchange,提问作者Lokeesh Bharathi S
相关产品推荐
相关产品推荐

