近段时间,由于某种原因我一直在研究js不同地区不同时区之间的时间换算。北京时间早上9点,在其他地区可能已经是夜晚了。
我们都知道,国内统一使用的都是北京时间,但在国外,不仅因时区不同而有时间差异,同一地区还存在夏令时冬令时的时间差异,如果程序上涉及时间上的计算,要千万小心了。
一、new Date的基本使用
-
直接使用
new Date()
:返回统设置的当前时间对象。 -
传入参数为时间戳,如
new Date(1453094034000)
:返回时间戳对应的时间对象。 -
传入参数年月日时分秒,如
new Date(2019, 3, 2, 16, 37, 22)
:返回参数的对应日期的时间对象,时分秒不传默认0时0分0秒。注意这里的月份参数从0开始,传入3即为4月。 -
传入参数为时间字符串,如
new Date('Tue Apr 02 2019 16:39:08');
:返回当前系统设置的时间对应的改日期时间对象。 -
传入参数为某指定时区的字符串,如
new Date("2019-04-21 21:00:00 EDT")
: 返回参数中时区对应的时间转换成当前系统设置的时区对应的时间对象,这也是我们在使用js进行时区换算经常用到的方法。 -
以下格式也可以正确解析:
new Date('4-21-2019 21:00:00 EST') new Date("2019/04/21 21:00:00 EDT") new Date("2019/04/21 9:00 PM EDT") new Date('4/21/2019 9:00 PM EST') new Date('2019-04-21T21:00:00') new Date("Apr 21, 2019 9:00:00"); new Date("April 21, 2019 9:00:00"); new Date(95, 3, 21) //两位数年份表示 1900 - 1999 年
注意:
1. new Date()参数中不含时区时默认为当前系统设置的的时区
2. new Date('2019-04-21 21:00:00 EDT')
当参数年月日格式使用 - 时,不兼容火狐和苹果浏览器
二、使用new Date进行时区转换
-
将某一指定时区的时间转换成UTC时间
var date = new Date("2019-04-21 21:00:00 EDT"); //不指定时区默认为当前系统设置的时区 var utcDate = date.toUTCString(); console.log(utcDate); // "Mon, 22 Apr 2019 01:00:00 GMT" // 注意,这里的utcDate是时间字符串,不能直接使用getFullYear()等方法
-
将某一指定时区的时间转换成当前用户所在时区对应的时间
new Date("2019-04-21 21:00:00 EDT");
-
将UTC时间转换当前用户所在时区对应的时间
new Date("2019-04-21 21:00:00 GMT"); // 或 new Date("2019-04-21 21:00:00 UTC");
三、常用的时间缩写
- EST: 美国东部标准时间 ,GMT-5
- EDT: 美国东部夏令时时间 ,GMT-4
- CST:美国中部标准时间,GMT-6
- CDT:美国中部夏令时时间,GMT-5
- PST: (美国)太平洋标准时间,GMT-8
- PDT:(美国)太平洋夏令时时间,GMT-7
- GMT: 格林威治标准时间,即UTC时间
- CCT:北京时间(中国沿海时间),GMT+8
更多时区缩写可参考http://www.cnblogs.com/tracy/archive/2010/07/16/1778566.html