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

JavaScript中如何根据月份和时区获取正确的当月首尾日期(yyyy-mm-dd格式)

JavaScript中如何根据月份和时区获取正确的当月首尾日期(yyyy-mm-dd格式)

嘿,我明白你遇到的困扰了——明明代码逻辑看着没问题,却拿不到预期的2024-10-01和2024-10-31对吧?先看看你写的代码:

var year = 2024;
var month = 9; // October
var firstDay = new Date(year, month, 1);
firstDate = firstDay.toISOString().split('T')[0];
document.getElementById("a").innerHTML = firstDay+" | "+firstDate;

var lastDay = new Date(year, month+1, 0);
lastDate = lastDay.toISOString().split('T')[0];
document.getElementById("b").innerHTML = lastDay+" | "+lastDate;
<p id="a"></p>
<p id="b"></p>

问题确实出在**时区(GMT/UTC)**上!你用的toISOString()方法会把日期转换成UTC时区的字符串,举个例子,如果你的本地时区是东八区(比UTC早8小时),那本地时间的2024-10-01 00:00:00,转换成UTC就是2024-09-30 16:00:00,拆分后自然就变成了2024-09-30,这就是你拿到意外结果的原因。

给你两种靠谱的解决办法:

方法一:手动拼接日期字符串(最直接,避开时区坑)

既然我们已经明确知道年份、月份和目标日期,直接按格式拼接就好,完全不用依赖时区相关的转换:

var year = 2024;
var month = 9; // Date对象的月份是0基,9对应10月
// 处理当月第一天,月份要+1,不足两位补0
var firstDate = `${year}-${String(month + 1).padStart(2, '0')}-01`;
// 先拿到当月最后一天的日期数字,再补0拼接
var lastDay = new Date(year, month + 1, 0);
var lastDate = `${year}-${String(month + 1).padStart(2, '0')}-${String(lastDay.getDate()).padStart(2, '0')}`;

document.getElementById("a").innerHTML = firstDate;
document.getElementById("b").innerHTML = lastDate;

方法二:调整时区偏移后再转换字符串

如果你一定要用toISOString(),可以先把日期的时区偏移量加回去,确保转换后的UTC字符串对应本地的正确日期:

var year = 2024;
var month = 9;
var firstDay = new Date(year, month, 1);
// 加上时区偏移(getTimezoneOffset返回本地与UTC的分钟差,东八区是-480,加回去相当于抵消时区差)
firstDay.setMinutes(firstDay.getMinutes() + firstDay.getTimezoneOffset());
var firstDate = firstDay.toISOString().split('T')[0];

var lastDay = new Date(year, month + 1, 0);
lastDay.setMinutes(lastDay.getMinutes() + lastDay.getTimezoneOffset());
var lastDate = lastDay.toISOString().split('T')[0];

document.getElementById("a").innerHTML = firstDay+" | "+firstDate;
document.getElementById("b").innerHTML = lastDay+" | "+lastDate;

这样就能得到你想要的2024-10-01和2024-10-31啦~

备注:内容来源于stack exchange,提问作者Francesco G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:50:27