如何在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




