JS中时间对象与时间的格式化

JS中时间对象与时间的格式化

new Date("2024-04-08T00:00:00")// 输出 Mon Apr 08 2024 00:00:00 GMT+0800 (中国标准时间) 时间就是按照东八区来输出的
new Date("2024-04-08 00:00:00")// 输出 Mon Apr 08 2024 00:00:00 GMT+0800 (中国标准时间) 时间就是按照东八区来输出的
new Date()    // Mon Apr 08 2024 14:39:35 GMT+0800 (中国标准时间)  时间就是按照东八区来输出的

new Date("2024-04-08T00:00:00Z") // Mon Apr 08 2024 08:00:00 GMT+0800 (中国标准时间) 参数中的Z代表的是UTC时间,他会认为我传给他的是一个0时区的时间,输出的时候使用东八区的时间展示的。
new Date("2024-04-08") // Mon Apr 08 2024 08:00:00 GMT+0800 (中国标准时间)  原本以为应该是00:00,但是实际多出来了8个小时。不知道这一一块的时区是怎么实现的。

从上面的代码的输出可以看出,当使用new Date("2024-04-08T00:00:00Z")或者是new Date("2024-04-08")的时候,时间会多出来8个小时。

  • 开发中,可以直接使用new Date()或者是new Date("yyyy-MM-dd HH:mm:ss")来获取当前的时间是不会收到时区的影响的。
  • 不要使用new Date("yyyy-MM-dd")或者是new Date("yyyy-MM-dd HH:mm:ssZ")。这要获取到的时间会比系统时间多出来8个小时。

时间格式化可以使用moment.js

  • 在使用moment.js格式化时间的过程中,没有发现时区导致的时间不正确的问题。
moment() // Sun Nov 17 2024 16:43:15 GMT+0800 (中国标准时间)  返回的是当前时区的当前时间
moment('2024-04-08') // Mon Apr 08 2024 00:00:00 GMT+0800 (中国标准时间) 返回的是当前时区的0点
moment('2024-04-08T00:00:00Z') //Mon Apr 08 2024 08:00:00 GMT+0800 (中国标准时间)  传入的是一个UTC时间,返回的是一个将UTC时间转换为GMT+8显示的时间。针对该moment使用year(),hour(),format()函数的时候,返回的也是根据东八区的时间为基础的。

HTTP请求中日期参数被转换成UTC的表示时间

let params = {
  satrtDate: new Date(),
  endDate: new Date()
} 
  • 如果HTTP参数中,有用时间对象表示的参数,打开network工具栏会发现时间被转换成为了UTC时区的时间,这是因为JS对象转换成JSON字符串造成的。
  • 即使是将new Date()替换成为moment(),时间也会被JS转换。
  • 可以使用moment().format()函数获取日期时间,通过字符串的形式传递日期参数,JS不会转换。
  • 直接使用new Date()作为参数值的话,参数会携带着时区信息,后端(SringBoot)中配置的jackson时区就会失效

posted on 2024-04-08 14:49  zhaoLei_Free  阅读(221)  评论(0编辑  收藏  举报

导航