javascript中时区知识的整理UTC GMT问题

 更新时间:2023年10月23日 17:05:22   作者:352328759  
这篇文章主要介绍了javascript中时区知识的整理UTC GMT问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

GMT, UTC 是什么?

  • GMT: 格林尼治时间
  • UTC: 协调世界时

GMT 与 UTC 不完全相同, 但都是指 0 时区时间, 一般情况可以视作同义 

作为 javascript 开发者, 是不是对 GMT 很眼熟?

其实 GMT 就是我们调用 new Date(); 时, 返回的字符串 “Wed Jan 06 2021 17:48:30 GMT+0800 (中国标准时间)” 中的 GMT

GMT+0800: 中国是东8区, 所以是 格林尼治时间 + 08:00 (东正西负; +0800 即是 +08:00, 的意思; 有兴趣的自行上网学习)

时差是什么?

本文中的"时差"指的是 javascript 中的时差, 而不是地理上的时差

javascript 中的时差是指 格林威治时间和本地时间之间的时间差

也就是

格林威治时间 - 本地时间 = 时差

经过简单换算, 可得以下结论:

  • UTC + 8 = GMT + 8 = 北京时间(中国是东8区)
  • 格林威治时间 + 8 = 北京时间
  • 格林威治时间 - 北京时间 = -8
  • 格林威治时间 - 本地时间 = 时差

getTimezoneOffset()

javascript 提供一个方法用于获取时差

getTimezoneOffset() 方法可返回格林威治时间和本地时间之间的时差,以分钟为单位

用法:

new Date().getTimezoneOffset() // -480

javascript 时间戳

指定的日期和时间距 1970 年 1 月 1 日午夜(GMT 时间)之间的毫秒数

这里强调两点, 两点缺一不可

  • 1970 年 1 月 1 日 0 时 0 分 0 秒
  • 格林威治时间

设置日期时间

new Date() 可以不传值也可以接受好几种值

new Date(时间戳)

  • 先根据传入毫秒数算得 GMT, 再把 GMT 转换到本地时区
  • 所以传入 0 得到的不是 0 点而是 8 点(中国是东8区)

new Date(时间字符串)

  • 时间字符串可以是这样的 “1970-1-10 0:0:0”
  • 还可以在后面补充指定时区 “1970-1-10 0:0:0 gmt+0900”
  • 不指定时区, 默认是 GMT+0800(中国是东8区)
  • 最后转换成本地时区

new Date(year, month, day, hours, minutes, seconds, milliseconds)

  • 最少传入两数据, 传 null 或不传, 为当前时间的值
  • 传入的是本地时区
  • 获得的是本地时区

获取时间戳

方法很多

  • new Date().getTime()
  • new Date().valueOf()
  • +new Date()
  • Date.now()

得到的时间戳, 是把本地时间(北京时间)换算成 GMT , 再计算跟 1970 年 1 月 1 日 0 时 0 分 0 秒 的毫秒差值

Date.UTC()

Date.UTC(年,月,日,时,分,秒,毫秒)

得到的时间戳, 直接就是 GMT, 再计算跟 1970 年 1 月 1 日 0 时 0 分 0 秒 的毫秒差值

UTC() 方法可根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数

参数不能为空, 可以为 null, 缺失值或 null 以 0 补充

UTC, 时差, 本地时间关系的代码表达

var _date = new Date();

var _UTC = Date.UTC(_date.getFullYear(), _date.getMonth(), _date.getDate(), _date.getHours(), _date.getMinutes(), _date.getSeconds(), _date.getMilliseconds());
var _BJ = _date * 1;
var _timeDifference = new Date().getTimezoneOffset() * 60 * 1000

_BJ - _UTC === _timeDifference // true

//end

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • javascript解析xml实现省市县三级联动的方法

    javascript解析xml实现省市县三级联动的方法

    这篇文章主要介绍了javascript解析xml实现省市县三级联动的方法,涉及javascript针对节点的操作与XML文件解析的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • iscroll碰到Select无法选择下拉刷新的解决办法

    iscroll碰到Select无法选择下拉刷新的解决办法

    本文主要介绍iscroll插件在使用中,遇到select下拉框无法下拉刷新的处理方法,希望能帮到大家。
    2016-05-05
  • JS设置时间无效问题的解决办法

    JS设置时间无效问题的解决办法

    在发送短信息验证码的时候要用到js设置时间倒序问题,有时候会导致js失效问题,怎么办呢?今天小编给大家分享JS设置时间无效问题的解决办法,需要的朋友参考下吧
    2017-02-02
  • JavaScript中匿名函数的递归调用

    JavaScript中匿名函数的递归调用

    本文主要介绍了JavaScript中匿名函数的递归调用。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • NodeJS的Promise的用法解析

    NodeJS的Promise的用法解析

    下面小编就为大家带来一篇NodeJS的Promise的用法解析。小编觉得挺不错的,现在分享给大家,也给大家做个参考
    2016-05-05
  • 如何在JavaScript中比较日期详解

    如何在JavaScript中比较日期详解

    我们在日常开发过程中经常会用到JavaScript语言在前端代码中,进行日期的选择,下面这篇文章主要给大家介绍了关于如何在JavaScript中比较日期的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • js 执行上下文和作用域的相关总结

    js 执行上下文和作用域的相关总结

    这篇文章主要介绍了js 执行上下文和作用域的相关知识总结,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下
    2021-02-02
  • Webpack实现多页面打包的方法步骤

    Webpack实现多页面打包的方法步骤

    本文主要介绍了Webpack实现多页面打包的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • echarts实现折线图的拖拽效果

    echarts实现折线图的拖拽效果

    这篇文章主要为大家详细介绍了echarts实现折线图的拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Window.Open如何在同一个标签页打开

    Window.Open如何在同一个标签页打开

    这篇文章主要介绍了Window.Open如何在同一个标签页打开,需要的朋友可以参考下
    2014-06-06

最新评论