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

