前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >js处理日期时区问题

js处理日期时区问题

原创
作者头像
程序员小爽
发布于 2023-07-12 12:24:36
发布于 2023-07-12 12:24:36
1.2K00
代码可运行
举报
文章被收录于专栏:国际化国际化
运行总次数:0
代码可运行

在国际化的开发中,会遇到时区问题, 平时用js处理时间,基本上忽略了时区,javascript默认用的是机器本地的时区来处理。如果涉及到时区转换,有以下几种方式进行处理。

一、日期格式后缀法

通常new Date()会得到一个这种结构的日期时间:Thu Dec 09 2021 15:19:04 GMT+0800 最后的GMT表示格林尼治时间,+0800表示东八区

如果new Date()带有包含时区的参数,会把参数时间转换成当前时区时间,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new Date('Thu Dec 09 2021 15:19:04 GMT+0900') 

会输出Thu Dec 09 2021 14:19:04 GMT+0800,意思就是东九区的15点19分实际上是东八区的14点19分,省略掉GMT直接+-数值也是可以的new Date('Thu Dec 09 2021 15:19:04 +9')

除了gmt,utc也可以表示0时区,只是两者意义不同,UTC称为协调世界时,其它常见的还有PDT(太平洋夏季时间),PST(太平洋标准时间、西八区)

此外还有一种日期格式:2021-12-09T07:36:28Z T表示后面的是时间,可以用空格代替,Z表示0时区,加减时区方式和上面一样

二、转换为格林威治时间法

// 先获取当前所在国家和格林威治时间之间的差值,默认是分钟数 // 使用Date对象的getTimezoneOffset() 就可以获取到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    const difference = new Date().getTimezoneOffset() * 60 * 1000 //将差异值转成毫秒值
    // 获取格林威治时间的毫秒值,用+ 的原因是因为如果是比格林威治时间快的地区,这个方法返回值
    //是一个负数,而慢的地区返回值是一个正数
    const GreenwichMillminutes = new Date().getTime() + difference 
    // 利用这个毫秒值获取格林威治地区的日期对象实例 
    const GreenwichDate = new Date(GreenwichMillminutes);
	
	//可以根据时区,对时间戳进行加减运算,获得对应时区的时间戳
	//例如北京时间
	var beijingTimeStamp = GreenwichMillminutes + 8*60*60*1000;
	const bejingDate = new Date(beijingTimeStamp);

以上是两种纯前端javascript进行时区处理的方法。 在线体验转换可以通过工具 www.guud.cn/tools/ti... 进行转换验证。

在线时间戳转换工具
在线时间戳转换工具

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JS基础-JS内置对象Date详解
year:表示年份的整数值。0到99会被映射至1900年至1999年,其它值代表实际年份。
用户10106350
2022/10/28
3.8K0
isSameDate
使用Date.prototype.toISOString()全等比较传入的日期对象。
公众号@魔术师卡颂
2020/08/26
6680
通过 getTimezoneOffset() 方法判断当前时区是否为夏令时
getTimezoneOffset() 方法 方法返回 UTC 时间和本地时间之间的时差,以分钟为单位。
子舒
2022/06/09
1.7K0
了解一下ISO 8601是什么
上周的组内分享,有朋友介绍一个工具包生成的日期是UTC,需要转成北京时,另外还带了Z,很是不解,组长介绍说这是ISO 8601的日期格式标准。
bisal
2021/09/06
7.6K0
了解一下ISO 8601是什么
Elasticsearch 时区问题 彻底搞懂
以下列举了几种不同字母表示时区的用法, 演示为主, 代码执行时最好将案例时间2024-05-18换成您这边执行的当天日期,这样比较容易在discover中去查看, 如果您这边用默认format, 直接看总结就行
牛朝阳
2024/09/04
5650
GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?
日期/时间的处理是平时开发中非常常见的场景,若只是简单的格式化场景那就还好,一旦涉及到时区、跨地域跨时区时间转换场景,甚至当还有GMT时间、UTC时间等一堆概念堆上来的时候,总是心理发虚,招架不住。
YourBatman
2021/01/19
3.4K0
GMT UTC CST ISO 夏令时 时间戳,都是些什么鬼?
【踩坑】服务器和本地相差8小时
如果添加的该条数据的时间区间在数据库中已经有重叠的区间,那么就不允许添加,但是在添加的数据的时候,明明添加并没有这个区间,但是一直提示已经存在数据
神仙朱
2021/07/20
7.8K0
前端中的时间
这涉及到时间字符串格式的两个标准。前者4/29/2019是RFC2822格式,后者是ISO 8601格式。
LIYI
2019/09/02
2K0
js 国际化需求 获取当前时区
getTimezoneOffset() 方法可返回格林威治时间和本地时间之间的时差,以分钟为单位。
我只会写Bug啊
2023/12/25
5710
Web开发中的时区问题
关于时区的概念,想必大家都有些了解。我们的地球被划分为24个时区,北京时间为东八区,而美国的太平洋时间为西八区,和我们差了16个小时。
草捏子
2020/08/10
3.6K0
Web开发中的时区问题
什么是时区?
1884年在华盛顿召开的一次国际经度会议(又称国际子午线会议)上,规定将全球划分为24个时区(东、西各12个时区)。规定英国(格林尼治天文台旧址)为中时区(零时区)、东1-12区,西1-12区。每个时区横跨经度15度,时间正好是1小时。
JMCui
2023/03/02
1.9K0
什么是时区?
JavaScript日期处理
​ 当然,Github上提供了好多优秀的日期处理插件(如:Datejs、date-fns、jquery-dateFormat),然而当处理一些简单的日期操作去引用插件,还是挺耗费资源。
奋飛
2019/08/15
4.4K4
到了2038年时间戳溢出了怎么办?
我经常自嘲,自己写的程序运行不超过3年,因为大部分项目方就早早跑路了。大多数项目上线后,你跟这个项目就再无瓜葛,关于时间你只需要保证时区正确就不会有太大问题,哈哈。 但是今天我想认真对待时间这个问题,作为一个库作者或基础软件作者,就需要考虑下游项目万一因为你处理时间不当而造成困扰,影响范围就比较广了。
程序饲养员
2023/12/28
1.2K0
到了2038年时间戳溢出了怎么办?
为什么到了时间你的活动还没开始——探究Date对象
假设有一个活动,原计划定的是12月25日早上8点开始,结果苹果用户到了早上8点却看见活动按钮还是灰色的,而且PC、安卓都是正常。这种情况如果发生,首先往哪个方向考虑呢?
lhyt
2019/09/08
1.6K0
ES系列之一文带你避开日期类型存在的坑
时间相关的字段是ElasticsSearch(以下简称ES)最常用的字段了,几乎所有的索引应用场景都会有时间字段,一般用于基于时间范围的搜索,聚合等场景。但是由于时区的问题,相信很多小伙伴都踩到过时间字段的坑,笔者自己就踩过。
用户7634691
2020/08/10
7K0
c++ 时间类型详解(time_t和tm)
原文:http://blog.csdn.net/love_gaohz/article/details/6637625
用户7886150
2021/02/17
3.2K0
Js中Date对象
JavaScript的Date对象是用于处理日期和时间的全局对象,Date对象基于Unix Time Stamp,即自1970年1月1日UTC起经过的毫秒数。
WindRunnerMax
2020/10/26
21.4K0
全网最全!彻底弄透Java处理GMT/UTC日期时间
本系列的目的是明明白白、彻彻底底的搞定日期/时间处理的几乎所有case。上篇文章 铺设所有涉及到的概念解释,例如GMT、UTC、夏令时、时间戳等等,若你还没看过,不仅强烈建议而是强制建议你前往用花5分钟看一下,因为日期时间处理较为特殊,实战必须基于对概念的了解,否则很可能依旧雾里看花。
YourBatman
2021/01/21
5.1K0
全网最全!彻底弄透Java处理GMT/UTC日期时间
由浅入深,走进中级工程师都未必知道的 JavaScript 时间处理冷知识
在过去,世界各地都各自订定当地时间,例如我国古代将一昼夜分为十二时辰,每一时辰相当于现代的两个小时。但随着交通和通信的发达,各地交流日益频繁,不同的地方时间给人们造成了许多困扰。于是在1884年的国际经度会议上制定了全球性的标准时,确定以英国伦敦格林威治区这个地方为零度经线的起点(本初子午线),并以地球由西向东每24小时自转一周360°,规定经度每隔15°,时差1小时,而每15°的经线则称为该时区的中央经线。全球被划分为24个时区,其中包含23个整时区及180°经线左右两侧的2个半时区。东经的时间比西经要早,也就是如果格林威治时间是中午12时,则中央经线15°E的时区为下午1时,中央经线30°E时区的时间为下午2时;反之,中央经线15°W的时区时间为上午11时,中央经线30°W时区的时间为上午10时。如果两人同时从格林威治的0°各往东、西方前进,当他们在经线180°时,就会相差24小时,所以经线180°被定为国际换日线,由西向东通过此线时日期要减去一日,反之,若由东向西则增加一日。
wade
2021/07/08
2.2K0
由浅入深,走进中级工程师都未必知道的 JavaScript 时间处理冷知识
需要知道的JS的日期知识,都在这了
JS中的 Date 很奇怪。当我们需要处理日期和时间的时候比较麻烦,经常借助像date-fns和 Moment 这样的库。
前端小智@大迁世界
2019/07/02
2.7K0
相关推荐
JS基础-JS内置对象Date详解
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验