阅读(3776) (0)

浅析Date对象及常用时间格式

2017-06-07 18:56:11 更新

Date(时间)对象是JavaScript在浏览器环境的一个内置对象,用于处理客户端时间逻辑。本篇文章将会简单的介绍Date对象,重点是介绍Web开发中涉及到时间时常用的几种时间字符串格式。

Date对象

关于Date对象详细的文档说明,请参阅Mozilla开发者中心

这里稍微提两点,Data对象中,除了3个比较特殊方法(这里我们可以将其理解成静态方法)之外,其他的方法都是实例方法。

  • Date.UTC(),接受一个合法的时间字符串或者多个日期参数,返回此时间距1970-1-1 00:00:00的毫秒数。
  • Date.now(),返回方法调用时刻距1970-1-1 00:00:00的毫秒数。
  • Date.parse(),这个方法比较灵活,可以接受多种参数,返回参数所代表的时间点距1970-1-1 00:00:00的毫秒数。

此外,Date对象的构造方法接受参数的形式非常灵活,在实际使用要活学活用。

好了,其他的内容就可以直接参考MDN文档了。

各种时间格式

上述提到Date对象的构造函数或者部分实例方法可以接受一个合法的时间格式字符串作为参数。这里我们先来对常见的几种时间格式做一下科普。

GMT时间

先来段网上的关于GMT时间的段子,

十七世纪,格林威治皇家天文台为了海上霸权的扩张计划而进行天体观测。1675年旧皇家观测所(Old Royal Observatory)正式成立,到了1884年决定以通过格林威治的子午线作为划分地球东西两半球的经度零度。观测所门口墙上有一个标志24小时的时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为标准来设定时间,这就是我们耳熟能详的「格林威治标准时间」(Greenwich Mean Time,简称G.M.T.)的由来,标示在手表上,则代表此表具有两地时间功能,也就是同时可以显示原居地和另一个国度的时间。

再来给出wiki上定义,其实GMT时间是全球24时区划分的标准。北京时间就是处于东八区上,一般的北京时间会被表示成localtimestring + GMT+0800,如下,

Wed Mar 11 2015 18:54:49 GMT+0800 (中国标准时间)

从wiki中,我们可以知道,GMT是根据地球自转及格林威治子午线来调时的。但是由于种种原因,这种计时是存在误差的。现在的标准时间,是由原子钟报时的协调世界时(UTC)。

UTC时间

首先给出其定义

UTC时间,又称为世界标准时间或者世界协调时间,简称UTC(Coordinated Universal Time),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林威治时间(其实UTC时间比GMT时间要精确)。

ISO时间

我们这里说的ISO时间其实指的是国际标准化组织ISO制定的ISO 8601标准,是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》,目前是第三版ISO8601:2004以替代第一版ISO8601:1988与第二版ISO8601:2000。

关于ISO 8601更多的内容请参见wiki

其他的时间格式

除了上述提到的在web开发中最常用的三种时间格式之外,还有日常生活中常见的夏时制(DST)北京时间(CST)中部标准时间等等。不过因为这些时间格式在web开发(或者说展现)中并不常用,这里我们就一笔带过,不再多作介绍。

各时间格式之间转化

我们在浏览器书写如下代码即可得带一个时间对象,

var d = new Date();
console.log(d);

这里我们没有给Date的构造函数传递任何参数,得到的将是封装当前时间的一个时间对象。

上述代码在Chrome Console中执行的结果如下,

Wed Mar 11 2015 19:14:51 GMT+0800 (中国标准时间)

这其实是一种山寨的GMT时间格式字符串,中国标准时间其实就是北京时间。

我们继续在console中执行下面的代码,

d.toGMTString();
d.toUTCString();
d.toISOString();

结果如下,

"Wed, 11 Mar 2015 11:14:51 GMT"
"Wed, 11 Mar 2015 11:14:51 GMT"
"2015-03-11T11:14:51.182Z"

从结果可以看出toGMTString()toUTCString()得到的结果是一致。前面我们也说过,UTC时间其实就是更加精确的GMT时间。

至于toISOString()得到的时间字符串是有一般性规律的,其格式一般如下,

yyyy-mm-ddThh:mm:ss.000Z

使用字母TZ链接日期和时间,且Z前面还会有三位数,这三位数是时间对象对应的毫秒数。

由上面我们可以看出,在进行web开发时,如果涉及到日期时间的相关展示时,我们应该选择哪一种时间格式作为数据传输的格式呢?答案无疑是ISO时间格式,因为它具有一定的规律,且都是有数字组成的基本格式。

参考列表