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

解决JavaScript获取指定月份最后一天10位Unix时间戳错误问题

解决获取月份最后一天10位Unix时间戳的时区问题

嗨,我来帮你搞定这个问题!你的代码逻辑其实没毛病——new Date(date.getFullYear(), date.getMonth() + 1, 0)确实能准确拿到当月的最后一天,但问题出在时区差异上,导致你用UTC时间戳查询工具看到的日期不对。

问题根源

getTime()返回的是UTC时间戳(从1970年1月1日UTC开始的毫秒数),而你用new Date()生成的日期是基于本地时区的。举个例子:如果你的本地时区是UTC+5:30,那么本地时间5月31日00:00对应的UTC时间就是5月30日18:30,所以你拿到的时间戳查询UTC日期时,就会显示5月30日,但实际上本地时间是正确的5月31日。

两种可行解决方案

根据你需求的时区方向,选下面其中一种方法就行:

方案1:获取UTC时区的当月最后一天时间戳

如果你需要的是UTC标准下的当月最后一天(比如服务器统一用UTC时间),直接用Date.UTC()构造日期,完全绕开本地时区:

var date = new Date();
// 获取UTC时区的年、月
var utcYear = date.getUTCFullYear();
var utcMonth = date.getUTCMonth();
// 构造UTC时区的当月最后一天(00:00:00)
var utcLastDay = new Date(Date.UTC(utcYear, utcMonth + 1, 0));
// 转换成10位时间戳
var monthLastDayUtc = Math.floor(utcLastDay.getTime() / 1000);
console.log(monthLastDayUtc);

这个时间戳对应的UTC日期就是当月最后一天,完全符合你的预期。

方案2:获取本地时区当月最后一天的完整时间戳

如果你需要确保时间戳对应的UTC日期也显示为当月最后一天,可以把本地时间设置为当月最后一天的23:59:59,这样即使转换为UTC,也不会跳到前一天:

var date = new Date();
// 构造本地时区当月最后一天的23:59:59
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59);
// 转换成10位时间戳
var monthLastDay = Math.floor(lastDay.getTime() / 1000);
console.log(monthLastDay);

比如你测试6月的情况,本地时间6月30日23:59:59对应的UTC时间是6月30日18:29:59(UTC+5:30时区),此时查询UTC时间戳就会显示6月30日,完全正确。

验证你的测试案例

用方案2测试你提供的6月案例:

var date = new Date('6/8/2018');
var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59);
var monthLastDay = Math.floor(lastDay.getTime() / 1000);
console.log(monthLastDay); // 输出的时间戳对应UTC时间6/30/2018,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:32:44