Date范例:相识日期和时候

Date是javascript中的援用数据范例之一,假如要处置惩罚日期、时候,平常都邑用到Date范例。不过,要正确地运用Date,还应当相识日期和时候有关的观点。就从Date范例的要领最先吧。

建立Date

下面这段代码用了差别的情势,建立了一个名为teaTime的变量,并赋值为Date范例值,时候是近来的某一个时候点:

// one way
var teaTime = new Date("Aug 21 2014 16:40:14");

// equivalent to...
var teaTime = new Date(2014, 7, 21, 16, 40, 14);

个中,组织函数Date传入了两种参数,来赋值给teaTime。不过,它们的效果是雷同的,都代表同一个时候点。现实上,组织函数Date吸收的参数是一个从1970年1月1日凌晨0点到愿望设定的时候点的毫秒数(可认为负,示意在此之前)。上面的例子为何可行呢?这是因为关于第一种字符串情势的单个参数,会在背景先挪用Date.parse()要领转化为毫秒数。相似的,第二种数字情势的多个参数(你能够还发明了月份是以数字0~11来示意的),会在背景挪用Date.UTC()要领转化为毫秒数。

UTC?这是什么?

UTC

UTC是指谐和天下时,是最主要的天下时候规范。这个缩写也是有泉源的,英语中它是CUT(Cooordinated Universal Time),而法语中它是TUC(Temps Universel Coordonné),因为被愿望谐和天下时在一切言语中有一致的缩写,末了让步运用了这个[UTC][](居然让步了!)。

UTC是以[原子时][]秒长为基础的。或许你另有印象,在国际单元制(SI)中,只要7个基础单元,秒(s)就是个中之一,用的就是原子时。因而,UTC充足准确,被作为当今运用的规范时候。

与UTC异常有关的是另一个经常被说起的时候规范,GMT。

GMT

GMT是指格林尼治规范时候,它对应位于英国伦敦郊区的皇家格林威治天文台的规范时候。[GMT][](Greenwich Mean Time)受地球自转影响,能够有较大偏差,因而GMT已不再被作为规范时候运用(也就是说,现在用UTC作为规范)。不过,假如不斟酌小于0.9秒的差别,GMT和UTC的时候能够认为是一样的。

Date.parse()可用的字符串花样

从前文能够晓得,因为并不轻易直接传入一个相关于1970年1月1日凌晨0点的毫秒数,一般我们都用Date.parse()Date.UTC()所支撑的参数情势。个中,Date.parse()是吸收示意日期的字符串参数,假如花样不对,将返回NaN

Date.parse()可用的示意日期的字符串包含RFC2822[]。另外,能够会支撑一些其他的花样,但因区域、浏览器差别,不能确保可用(所以,发起不运用)。

个中,ISO 8601的花样,比方下面如许的写法:

var teaTime = new Date("2014-08-21T18:11:35");

只要兼容ECMAScript 5的浏览器才可用。以我本身的测试效果而言,IE8及以下不支撑(返回NaN),请注重。

当前时候

Date组织函数的另一个异常经常使用的用法是,不通报参数,这时候,新建立的对象将自动取得当前日期和时候。因为这里取得的当前时候是运转javascript的装备的体系时候,所以假如你本身手工更改了体系时候至不和真实状况一致,则javascript返回的效果也一样不和真实状况一致。

在指定时候内壅塞javascript代码,能够用Date完成:

var start = new Date();
while (new Date() - start < 1000) {
// wait 1 second...
};

这能够用于某些测试。

超出范围的时候值

假如运用超出范围的时候值,差别的浏览器会有差别的处置惩罚。比方,在写本文的时候点,我测试了Aug 20 2014 15:75:32如许的值,Firefox 31会将其处置惩罚为Aug 20 2014 16:15:32,Chrome 36和IE9+返回Invalid Date,IE8-返回NaN

可见,要保证一般运转,最好的做法是保证输入的就是正当的时候值。

不运用new关键字的状况

假如不运用关键字new,也就是说,直接挪用Date(),则不管传什么参数,都返回一个String字符串数据,其内容是当前时候,相当于Date.now().toString()的效果:

// will get a string like "Fri Aug 22 2014 10:10:08 GMT+0800"
var teaTime = Date("Aldnoah Zero");

显现一致的时候信息

运用Date范例,平常是为了在页面中显现时候信息。不过,现实状况是,Date范例一切的将日期花样化为字符串的要领,包含toString()toLocaleString(),其效果都因浏览器差别而差别。因而,假如要显现一致的时候信息,应当运用getFullYear()getMonth()等get要领顺次猎取时候中的数字信息,然后本身以字符串组合的体式格局来构成本身想要的时候信息。比方:

var time = new Date("Aug 22 2014 16:40:54"),
timeString = "";

timeString += time.getFullYear() + "-";
timeString += (time.getMonth() + 1) + "-";
timeString += time.getDate() + " ";
timeString += time.getHours() + ":";
timeString += time.getMinutes() + ":";
timeString += time.getSeconds();

alert(timeString); // 2014-8-22 16:40:54 in all browsers

须要注重的是,get要领有相似getUTCHours()getHours()如许以UTC作为离别的状况。UTC系列的get要领返回的是前面所说的天下规范时候,时区上说就是零时区。而不带UTC的get要领返回的是当地时候。因为我们平常会用到的时候都是当地时候(比方国内是东八区,记为UTC/GMT +0800),所以基础只会用到getHours()这类情势的要领。

有关细致的Date范例的要领,请参考[MDN对Date的诠释][]。

取得时区信息

Date范例有一个getTimezoneOffset()的要领,它能够用来剖析当地与UTC时候之间的时差。比方我本身这里挪用的效果:

// -480 while I'm in china
var hereTimeOffset = new Date().getTimezoneOffset();

它的效果是当地时候和UTC时候相差的分钟数(而且是 UTC – 当地时候)。假如这个“当地”进入夏令时,这个值会有变化。

什么是夏令时?

DST

DST是指夏令时候,也叫做日光勤俭时候(Daylight saving time)。它是由部份国度所执行的在一年中的某一时候段(以夏日为中间,比方美国的4月到10月)内,将时候拨快1小时,以充分利用夏日较长的日光时候,勤俭能源的时候轨制。在执行夏令时的国度中,差别国度也会有差别的夏令时执行日期。

为何说DST会影响到getTimezoneOffset()这个值呢,看看Windows 7里的日期和时候选项:

《Date范例:相识日期和时候》

可见,夏令时已被集成在体系内,会对应地转变体系时候,从而影响效果。不过,你能够从上面看到,中国未执行夏令时,所以没必要忧郁受到影响,在此相识一下就能够了。

倒计时的制造要领

怎样制造一个倒计时?

起首,须要明白的是,javascript的每个Date对象示意的虽然是一个时候点,看起来包含年月日时分秒等多重信息,但它现实是由单个数字信息表现的,这个数字就是相关于1970年1月1日凌晨0点UTC的毫秒数。因而,将时候点对应的毫秒数,做减法,然后将差值效果(也是毫秒数)顺次转化为其他差别级别的时候单元,就能够获得倒计时信息。

你能够参考[How to create a simple javascript countdown timer][]。

结语

近来在完成某个日期和时候有关的功用时,发明本身对诸如UTC如许的观点都没有什么印象。所以,坚决地本身补习了一下,然后整顿成了这篇文章。

(从新编辑自我的博客,原文地点:http://acgtofe.com/posts/2014/08/a-tale-of-date

    原文作者:EdwardUp
    原文地址: https://segmentfault.com/a/1190000000645503
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞