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

Node.js获取当月首尾日期遇异常:输出不符且时分秒非零求解答

问题解决:Node.js获取当月第一天和最后一天

代码错误分析

你当前的代码存在两个核心问题:

  • 月份参数错误:getMonth()返回0~11的索引(0对应1月),你用d.getMonth() + 1会指向下一个月,而非当前月。
  • 未指定日期参数:仅传年份和月份时,Date构造函数默认日期为1,但你错误地传入了下一个月的索引,导致实际指向的是当前月最后一天(下一个月的0号等价于当前月最后一天)。

修正后的代码

let d = new Date();
let year = d.getFullYear();
let currentMonthIndex = d.getMonth();

// 当月第一天(本地时间0点)
let firstDate = new Date(year, currentMonthIndex, 1, 0, 0, 0, 0);
// 当月最后一天(本地时间0点)
let lastDate = new Date(year, currentMonthIndex + 1, 0, 0, 0, 0, 0);

// 输出本地时间和UTC时间对比
console.log("当月第一天(本地时间): ", firstDate.toLocaleString());
console.log("当月第一天(UTC时间): ", firstDate);
console.log("当月最后一天(本地时间): ", lastDate.toLocaleString());
console.log("当月最后一天(UTC时间): ", lastDate);

关于时分秒不为零的疑问

你看到的2023-06-30T18:30:00.000Z是UTC标准时间,而你的本地时区(例如印度时区UTC+5:30)比UTC早5.5小时。当你创建本地时间为00:00:00的日期时,转换为UTC就会显示为前一天的18:30:00。

如果需要直接输出UTC时区的当月0点日期,可以使用Date.UTC()构造:

let firstDateUTC = new Date(Date.UTC(year, currentMonthIndex, 1));
let lastDateUTC = new Date(Date.UTC(year, currentMonthIndex + 1, 0));
console.log("当月第一天(UTC 0点): ", firstDateUTC);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:34:56