ECMAScript 的基本引用类型——Date 讲解

860 阅读3分钟

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

Date 类型

ECMAScript 的 Date 类型是参考 Java 早期版本的 java.util.Date。Date 类型保存的是自 1970 年1 月 1 日午夜至今所经过的毫秒数,可以精确表示 1970 年 1 月1 日之后 285616 年的日期。示例:

let now = new Date();

默认不带参数的情况下,创建的对象将保存当前的日期和时间。如果要基于别的日期和时间创建,需要传入毫秒数。 不过直接传毫秒数有点不太友好,ECMAScript 提供了两个辅助方法,Date.parse()Date.UTC()。可以将指定日期转成毫秒数。

Date.parse()

Date.parse()支持以下日期格式:

  • 月/日/年,例如:5/20/2020
  • 月名 日,年,例如:May 20 2020
  • 周几 月名 日 年 时:分:秒 时区,如Tue May 20 202000:00:00 GMT-0700
  • ISO 8601扩展格式 YYYY-MM-DDTHH:mm:ss.sssZ,如2020-05-20T00:00:00(只适用于兼容ES5的实现) 如果把以上标识日期的字符串直接传给 Date 函数,省略了Date.parse(),那么 Date 会在后台默认调用,也就是说,可以省略Date.parse()方法。 示例:
let loveDate = new Date(Date.parse("May 20, 2020"));
// or
let loveDate = new Date("May 20, 2020");

Date.UTC()

Date.UTC()接受的参数格式是:年、零起点月数(1月是0,2月是1,以此类推)、日(1-31)、时(0-23)、分、秒和毫秒。这些参数中,只有前两个(年和月)是必需的。示例:

// GMT时间2000年1月1日零点
let y2k = new Date(Date.UTC(2000, 0));

// GMT时间2005年5月5日下午5点55分55秒
let allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));

Date.parse()一样,Date.UTC()也会被 Date 构造函数隐式调用,但有一个区别:这种情况下创建的是本地日期,不是 GMT 日期。

Date.now()

此外,ECMAScript 还提供了Date.now()方法,返回执行时的日期时间毫秒数,往往用在代码分析中。示例:

// 起始时间
let start = Date.now();

// 调用函数
doSomething();

// 结束时间
let stop = Date.now();

result = stop - start;

日期格式化

Date 类型有几个专门用于格式化日期的方法,它们都会返回字符串:

  • toDateString()显示日期中的周几、月、日、年(格式特定于实现)
  • toTimeString()显示日期中的时、分、秒和时区(格式特定于实现)
  • toLocaleDateString()显示日期中的周几、月、日、年(格式特定于实现和地区)
  • toLocaleTimeString()显示日期中的时、分、秒(格式特定于实现和地区)
  • toUTCString()显示完整的UTC日期(格式特定于实现) 这些方法的输出与toLocaleString()toString()一样,会因浏览器而异。因此不能用于在用户界面上一致地显示日期。

欢迎阅读其它文章