js处理日期时区问题

2023-07-12 20:24:36 浏览数 (1)

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

一、日期格式后缀法

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

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

代码语言:javascript复制
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复制
    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... 进行转换验证。

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

0 人点赞