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
相关产品推荐
相关产品推荐

