这个问题是我在 node 中遇到的,在获取一个当前时间时,少了8个小时,所以给大家分享一下两个解决办法
1、通过Moment.js来获取
这个moment是一个用于解析、验证、操作和显示日期时间的javaScript库,提供了丰富的功能和方法,可以简化日期时间的处理过程。
安装
npm install moment --save
使用
const moment=require('moment')
const utcMoment = moment.utc();
const localMoment = utcMoment.local();
console.log(localMoment.format('YYYY-MM-DD HH:mm:ss'));
2、通过getTimezoneOffset()
const utcDate = new Date();
const localOffset = utcDate.getTimezoneOffset() * 60000;
const localDate = new Date(utcDate - localOffset);
getTimezoneOffset()方法返回当前时区偏移值,单位是分钟,乘以 60000 可以转换为毫秒数。将 UTC 时间减去本地时间偏移量,即可得到本地时间
问题出现原因
在浏览器打印 new Date() 和在 node 中打印 new Date()是不一样的,后来才知道,new Date() 会根据浏览器所在的时区返回本地时间,而在 node 中,new Date()返回的是标准的 UTC 时间(世界协调时),这和北京标准时间是不一样的,所以会有时差问题。不过好像也没什么大问题,需要在 node 保存当前时间的话,直接在浏览器生成再传也行,嗯....在node中做处理好像多此一举了😁😁
扩展阅读
UTC(Coordinated Universal Time)是世界协调时间的缩写,是世界上最主要的时间标准之一。UTC 是由国际原子时(TAI)和格林尼治标准时间(GMT)共同演化而来,它基于原子钟的时间测量,具有非常高的精确度。
UTC 时间不受夏令时调整的影响,是一种固定的时间标准,广泛用于全球各种系统中,如航空、电信、互联网等领域。UTC 时间通常以小时、分钟和秒表示,比如 "2024-02-28T12:00:00Z" 表示 2024 年 2 月 28 日 12 点 0 分 0 秒的 UTC 时间。
在计算机领域中,UTC 时间也被广泛应用,用于记录时间戳、日志时间等,以保证跨时区的时间一致性。在程序中处理时间时,通常会将时间转换为 UTC 时间进行存储和计算,以避免时区带来的混乱。