龙空技术网

三分钟科普夏令时,并用Javascript判断当前时间是否属于夏令时

软件先生 146

前言:

今天我们对“js判断是否是时间”大致比较关心,看官们都想要分析一些“js判断是否是时间”的相关知识。那么小编在网络上收集了一些有关“js判断是否是时间””的相关资讯,希望大家能喜欢,看官们快快来了解一下吧!

最近项目上遇到了夏令时的问题,于是就对夏令时进行了分析研究,下面和大家一起分享一下,并在文章最后用Javascript代码来判断当前某一时区的某个特定时间是否属于夏令时。

什么是夏令时?

夏令时(Daylight Saving Time:DST),又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。

与夏令时(Daylight Saving Time:DST)相对的就是标准时间(Standard Time),在美国的表示方法,如东部标准时间(Eastern Standard Time;简写EST)。现在主要在下面的这些国家和地区实行。

北美的国家(如美国,加拿大)

欧盟所有国家

瑞士

俄罗斯

澳大利亚

新西兰

墨西哥

巴西

埃及

中东部份国家

其他国家和地区

在实施夏令时的国家或者地区,每年春天的3月份的第2个星期天到每年秋天的11月份的第1个星期天属于夏令时。

标准时间结束,进入夏令时

进入夏令时时,时钟往后拨一个小时,直接从1点变到3点,也就是说我们要比原来提前一个小时和美国佬开会。

比如,2018年的夏令时就直接跳过了2018年3月11日2:00 到2:59:59,直接从2018年3月11日凌晨1:59:59秒直接跳到2018年3月11日凌晨3:00:00开始。

2. 夏令时结束,进入标准时间

夏令时结束时,往前拨一个小时,要过两个1点,这时比平常晚一个小时。

比如,2018年的夏令时结束时间为2018年11月4日,在这一天,要过两个1点。

夏令时和时区的关系?

因为夏令时不是在世界上所有的国家都实行,因此,即使属于同一个时区的不同国家和地区,如果其中一个国家进入了夏令时,另外一个国家没有进入,这段夏令时时间段内,即使时区是一样的,但是其时间是不一样的。

下面的表格是笔者的测试结果:

序号

时区

是否应用了夏令时?

1

UTC-9(Alaska)

Y

2

UTC-8(Canada&US)

Y

3

UTC-6 (Easter IsLand)

N

4

UTC-5 (Eastern Time (US&Canada))

Y

5

UTC-5 (Indiana(East))

Y

6

UTC-5 (Bogota, Lima, Quito, Rio Branco)

N

7

UTC-4 (Atlantic Time(Canada))

Y

8

UTC-5 (Chetumal)

N

从上表可以看出,Bogota, Lima, Quito, Rio Branco等国家和地区,即使也是属于UTC-5,但是其就是不实行夏令时。

那笔者是如何测试出来的,其实很简单,打开你的操作系统,点击桌面右下方的时间管理,就可以自己调整时区和时间来测试了,如下图所示意,当笔者选择的时区为UTC-5(US&Canada)的时候,如果在2018年3月11日,强制把时间改成2018年3月11日,2:53:40 AM是改不成功的,因为,这个时间点在UTC-5(US&Canada)压根就不存在,是不是涨知识了?

为什么有夏令时?中国有吗?

Daylight Saving Time,翻译成中文就是,日光节约时间,最早是1895年新西兰推出的,主要是节省当时的用电量,一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。

夏时制”的核心理念,就是充分利用日光照明,减少用电,从而节约能源。夏天日照时间长,在不更改作息时间的前提下,把“时间”提前,可以早早地利用阳光。

其实在中国也实施过夏令时,1986年5月4日凌晨两点整,在西单的电报大楼,工作人员将顶楼报时钟的表针拨向了三点。同时,中央人民广播电台传出了报时:“北京时间,三点整。”,但是后来由于现实原因,没有继续实施,具体原因,请读者自行搜索度娘,笔者就不在赘述。

Javascript如何判断当前是否是夏令时?

在Javascript有一个非常有用的时间对象,Date。

我们可以通过调用其方法getTimezoneOffset(),获得时区的偏移量(相对于GMT(标准时区)时间),其单位是分钟。

如果要换算成小时的偏移量,则需要除以60.

其偏移的量,在实施夏令时的国家和地区,在不同的月份返回值可能不是完全一样的。比如说,在一个实施夏令时的国家和地区,在每年的1月份和7月份,其时区偏移量返回值肯定是不一样的。

getTimezoneOffset() 方法将会返回相对标准时区的时间偏移量(单位为分钟),并符号取反。比如,GMT-5(US&Canada),在2018年的1月份, getTimezoneOffset()将会返回300而不是-300;在2018年的7月份,getTimezoneOffset()将会返回240.

jan.getTimezoneOffset() = 300

jul.getTimezoneOffset() = 240

当我们拿当前时间的当前时区偏移量和上面的1月份和7月份中的最大值进行比较,如果当前时区偏移量小于其最大值,我们认为当前就进入下了夏令时,是不是很神奇,学习知识和学习程序两不误。

读者如果感兴趣的话,可以把上图中的代码写到一个Javascript文件中,通过不断的调整你本机的时区和时间,然后在刷新浏览器,看是否会有夏令时的javascript消息框弹出。

读者如果遇到任何问题,请关注我的今日头条自媒体号,并在文章下面留言,我会尽可能第一时间回复大家。

【部分图片来源于网络,如果侵权,请与我联系删除】

标签: #js判断是否是时间