Node.js和MongoDB中使用的 UTC世界标准时间,浏览器中使用的GMT+8(中国标准时间) 。所以使用相同的时间戳,在Node.js环境下生成的 Date实例 “看起来” 会比浏览器环境下生成的Date实例早8个小时。
解决的办法其实很简单!并不需要像网上说的各种那么花里胡哨。(比如转成时间戳再加减8个小时,这样的操作实际上是在添乱,因为它让原本正确的时间反而变得不正确了!)
就是在当前环境使用传来的Date实例之前,再用new Date构造一遍即可!
问题描述:
-
浏览器中生成一个时间戳T,用T转换成Date实例
-
在Nodejs.js中,使用同样的T,构造一个Date实例
-
观察对比结果:浏览器下是 GMT+8 的10点15分,Node.js下是 T(即UMT)的2点15分,后者比前者“看起来”早了8小时(ps:其实时间是一样的,只是时区不同,显示出来不同而已)
解决方式:
-
浏览器接收到Node.js传来的Date实例,用new Date再构造一遍(ps:转换的目的是为了显示出符合当前环境时区下的正确时间,核心诉求是显示效果)
-
Node.js 接收到 浏览器 传来的 Date实例,用new Date再构造一遍(ps:后端其实一般不需要这个操作,系统能够自动识别Date的时区并进行正确转换)
-
观察对比结果:两种环境下 均显示出了 本环境对应时区下的正确时间!