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

Node.js中setHours设为0不生效,如何获取UTC 0点格式时间?

解决JavaScript设置零点后UTC时间不符的问题

嘿,我懂你碰到的这个时区坑!你看到的2018-03-20T18:30:00.000Z其实是本地时区和UTC时区的差异在搞鬼——给你掰扯清楚缘由:

当你调用new Date().setHours(0,0,0,0)时,是把当前本地时区的时间设成了当天零点,但toISOString()方法会把日期转换成UTC(协调世界时)标准时间输出。举个例子,如果你在UTC+5:30的时区(比如印度),本地零点对应的UTC时间就是前一天的18:30,这刚好就是你看到的输出结果。

那怎么拿到UTC时区的当天零点呢?给你两个靠谱的解决方案:

方案1:使用UTC专属的时间设置方法

直接用setUTCHours()代替setHours(),这个方法会直接操作UTC时间的小时数,设置后的Date对象转成ISO字符串时,就是UTC的零点了:

var today = new Date();
today.setUTCHours(0, 0, 0, 0);
var todaynew = today.toISOString();
console.log(todaynew); // 输出:2018-03-20T00:00:00.000Z

方案2:手动构造UTC零点的ISO字符串

如果你觉得操作Date对象容易搞混时区,也可以直接获取UTC的年、月、日,拼接成标准ISO格式字符串:

const now = new Date();
const year = now.getUTCFullYear();
// 月份从0开始计数,要+1且补前导零
const month = String(now.getUTCMonth() + 1).padStart(2, '0');
const day = String(now.getUTCDate()).padStart(2, '0');
const todaynew = `${year}-${month}-${day}T00:00:00.000Z`;
console.log(todaynew); // 同样输出目标格式

两种方法都能解决问题,第一种更简洁,第二种更直观,看你个人习惯选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:39:00