You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Node.js中获取UTC格式的Date对象?

获取JavaScript中的UTC Date对象

嘿,我懂你的困惑——JavaScript里的Date对象确实容易让人搞混,因为它默认的输出(比如toString())会显示成你的本地时区时间,但实际上所有Date对象内部存储的都是UTC时间戳(从1970-01-01 UTC零点开始计算的毫秒数)。不存在单独的“UTC Date对象”和“本地Date对象”之分,只是我们操作它的方式不同而已。下面给你具体的解决方案:

1. 理解Date对象的本质

new Date()或者Date.now()返回的结果,本质上已经是基于UTC的了:

  • Date.now()直接返回当前UTC时间的毫秒数
  • new Date()创建的对象,内部存储的就是这个UTC毫秒数,只是调用getHours()getDate()这类方法时,会自动转成你的本地时区对应的数值

举个例子,假设你在东八区(UTC+8),当前UTC时间是2024-05-20 10:00:00,那么:

const now = new Date();
now.getHours(); // 返回18(本地时区的小时)
now.getUTCHours(); // 返回10(UTC时区的小时)

2. 操作UTC时间的正确姿势

如果你需要获取或设置UTC对应的时间分量,直接使用Date对象的UTC系列方法就可以:

  • 获取UTC年份:getUTCFullYear()
  • 获取UTC月份:getUTCMonth()(注意:月份是0-11,1月对应0)
  • 获取UTC日期:getUTCDate()
  • 获取UTC小时:getUTCHours()
  • 获取UTC分钟:getUTCMinutes()
  • 获取UTC秒数:getUTCSeconds()
  • 获取UTC毫秒:getUTCMilliseconds()

这些方法会直接返回UTC时区对应的时间值,不需要转换字符串。

3. 创建指定UTC时间的Date对象

如果不是要当前时间,而是要创建一个对应某个UTC时间点的Date对象,可以用Date.UTC()方法生成对应的时间戳,再传给Date构造函数:

// 创建UTC时间2024-05-20 12:30:00的Date对象
const specifiedUTCDate = new Date(Date.UTC(2024, 4, 20, 12, 30, 0));

// 验证一下
specifiedUTCDate.getUTCHours(); // 返回12
specifiedUTCDate.getUTCMinutes(); // 返回30

总结

其实你不需要专门的“UTC Date对象”——所有Date对象都是UTC时间戳的封装。只要在获取时间分量时使用UTC系列方法,或者用Date.UTC()来创建指定UTC时间的对象,就能完全满足你的需求啦。

内容的提问来源于stack exchange,提问作者Nimish David Mathew

火山引擎 最新活动