我终于知道在格式化之后utc时间和北京时间的时差问题咋处理了

每日鸡汤:每个你想要学习的瞬间都是未来的你向自己求救

内容预警,这篇文章是我自己的理解,如果有不对的地方请一定,一定要多多指正!说不定我也理解错了,那就误人子弟了

一直被时间的字段的8小时时差给困扰,一会前端+8小时,一会后端+8小时,一会还要考虑国内线是啥,一会还要考虑国外现实啥?到底怎么回事呢?

我先说终极答案

想要国内外显示的都没问题的终极答案是

后端返回number类型的时间戳,前端使用new Date()格式化就可以

没错就是这么简单,如果你和后端同事都掰扯不明白时差的问题,谁都不想+8,-8小时,那么就让他返回时间戳然后就没他的事情了。然后你作为一个前端你要做的问题就是把他给的时间戳按照要求Y-m:s 之类的格式化就行了。这种场景,谁都不需要+8小时,结果就是正确的。

那么到底为什么会出现差8个小时的问题呢?

答:时区的差值,出现在转化成字符串这一步,这也就是为什么你console.log的时候就会出现时差,因为console.log会先把要打印的内容转成字符串。

同样的,在项目中都是要展示成y-m-d这种格式,自然会经过转成字符串这一步,所以自然会有时差,但是同一个时间戳,在浏览器和node中使用new Date()转化结果就不一样,有的有时差,有的没有。

所以,如果是后端直接给你返回格式化后的字符串,而不是时间戳,那么这个时差就是他格式化造成的。

我们前端项目多数运行在浏览器中,浏览器会根据系统时间格式化,这就是没有时差的!

总之我做的所有项目,没遇到任何一个是需要我们手动+8、-8小时的。

我理解的是同一个时间戳,如果我【前端,也就是浏览器中】在美国使用 new Date()就会得到美国的正确时间,如果我在中国使用new Date()就会的到中国的正确时间,所以还是那句话 时间戳 + new Date()的结果就是正确的,不需要自己转化!

不知道我理解的对不对,如果不对,请指正!!

你可能感兴趣的:(前端)