UTC世界标准时间、GMT格林尼治标准时间、中国标准时间北京时间

遇到的现象

  • let newObj = JSON.parse(JSON.stringify(obj)),假设对象obj有属性time

    • 如果time的值是new Date(), 则newObj得到的拷贝后的数据属性time时间与当前北京时间会差8小时。
    • 如果time的值是new Date().getTime(); //获取当前毫秒时间戳, 则newObj得到的拷贝后的数据是没有问题的。
  • 时间戳是什么?

    • 时间戳是指格林威治时间1970年01月01日00时00分00秒 (北京时间1970年01月01日08时00分00秒)起到现在的总秒数。是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
  • 看一个例子:

    console.log(new Date());//北京时间 中国标准时间
    console.log(JSON.stringify(new Date())); //UTC时间
    console.log(JSON.parse(JSON.stringify(new Date()))); //UTC时间
    console.log(new Date(JSON.parse(JSON.stringify(new Date()))));//北京时间 中国标准时间
    console.log(new Date(JSON.parse(JSON.stringify(new Date()))).toLocaleString());//北京时间 中国标准时间
    
    console.log(new Date().getTime());//时间戳
    console.log(JSON.stringify(new Date().getTime()));//时间戳
    console.log(JSON.parse(JSON.stringify(new Date().getTime())));//时间戳
    console.log(new Date(JSON.parse(JSON.stringify(new Date().getTime()))));//北京时间 中国标准时间
    console.log(new Date(JSON.parse(JSON.stringify(new Date().getTime()))).toLocaleString());//北京时间 中国标准时间
    

    浏览器控制台可以尝试输出以上内容,观察现象带着疑问看看下面几个概念!

new Date()

返回值

  • 返回类型为国标时间
  • 无参数时可以直接返回输出时的时间
  • 有参数时则返回对应时间的国标时间

内置方法

Date - w3school

方法描述
new Date()返回Sat Feb 21 2023 20:26:12 GMT+0800 (中国标准时间)
getFullYear()获取四位的年(yyyy)
getMonth()获取月(0-11)
getDay()以数值获取周名(0-6)
getDate()以数值返回天(1-31)
getHours()获取小时(0-23)
getMinutes()获取分(0-59)
getSeconds()获取秒(0-59)
getMilliseconds()获取毫秒(0-999)
getTime()获取时间(从 1970 年 1 月 1 日至今的毫秒数)
toLocaleString( )获取日期与时间 (如:2023/2/21 20:43:23)
toLocaleDateString()获取日期 (如:2023/2/21)
toLocaleTimeString()获取日期与时间 (如:20:43:23)
getUTCDate()根据世界时,返回月份中的第几天(从 1 到 31)
getUTCDay()根据世界时,返回星期几(0-6)
getUTCFullYear()根据世界时,返回年份
getUTCHours()根据世界时,返回小时(0-23)
getUTCMilliseconds()根据世界时,返回毫秒数(0-999)
getUTCMinutes()根据世界时,返回分钟(0-59)
getUTCMonth()根据世界时,返回月份(0-11)
getUTCSeconds()根据世界时,返回秒数(0-59)

GMT(格林尼治标准时间)

  • 格林尼治标准时间(Greenwich Mean Time,GMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。 理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。 地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。
  • 格林尼治标准时间

UTC(世界标准时间)

UTC+8(北京时间)

  • 北京时间
  • 北京时间是中国采用国际时区东八时区的区时作为标准时间。UTC+8

其实在文章最初抛出的现象的疑问可以解答了:

  • let newObj = JSON.parse(JSON.stringify(obj)),假设对象obj有属性time
    • 如果time的值是new Date(), 则newObj得到的拷贝后的数据属性time时间与北京时间会差8小时,JSON反序列化时间格式的数据时候,会在内部以UTC时间为标准进行转换,与北京时间差8小时也是正常现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值