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

文章讨论了在处理时间时区差异时的常见困惑,提出后端返回时间戳,前端使用newDate()进行格式化的解决方案,避免手动处理+8或-8小时的问题。时区差值只在转换为字符串时显现,同一时间戳在不同地区的新Date()转换结果会反映出当地正确时间,因此时间戳结合newDate()能确保正确性。
摘要由CSDN通过智能技术生成

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

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

一直被时间的字段的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()的结果就是正确的,不需要自己转化!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值