日期类

JavaScript 提供了用于表示日期的标准类,我们甚至可以用其表示时间点。该类型名为Date。如果使用new创建一个Date对象,你会得到当前的日期和时间。

  1. console.log(new Date());
  2. // → Mon Nov 13 2017 16:19:11 GMT+0100 (CET)

你也可以创建表示特定时间的对象。

  1. console.log(new Date(2009, 11, 9));
  2. // → Wed Dec 09 2009 00:00:00 GMT+0100 (CET)
  3. console.log(new Date(2009, 11, 9, 12, 59, 59, 999));
  4. // → Wed Dec 09 2009 12:59:59 GMT+0100 (CET)

JavaScript 中约定是:使用从 0 开始的数字表示月份(因此使用 11 表示 12 月),而使用从1开始的数字表示日期。这非常容易令人混淆。要注意这个细节。

构造器的后四个参数(小时、分钟、秒、毫秒)是可选的,如果用户没有指定这些参数,则参数的值默认为 0。

时间戳存储为 UTC 时区中 1970 年以来的毫秒数。 这遵循一个由“Unix 时间”设定的约定,该约定是在那个时候发明的。 你可以对 1970 年以前的时间使用负数。 日期对象上的getTime方法返回这个数字。 你可以想象它会很大。

  1. console.log(new Date(2013, 11, 19).getTime());
  2. // → 1387407600000
  3. console.log(new Date(1387407600000));
  4. // → Thu Dec 19 2013 00:00:00 GMT+0100 (CET)

如果你为Date构造器指定了一个参数,构造器会将该参数看成毫秒数。你可以创建一个新的Date对象,并调用getTime方法,或调用Date.now()函数来获取当前时间对应的毫秒数。

Date对象提供了一些方法来提取时间中的某些数值,比如getFullYeargetMonthgetDategetHoursgetMinutesgetSeconds。除了getFullYear之外该对象还有一个getYear方法,会返回使用两位数字表示的年份(比如 93 或 14),但很少用到。

通过在希望捕获的那部分模式字符串两边加上圆括号,我们可以从字符串中创建对应的Date对象。

  1. function getDate(string) {
  2. let [_, day, month, year] =
  3. /(\d{1,2})-(\d{1,2})-(\d{4})/.exec(string);
  4. return new Date(year, month - 1, day);
  5. }
  6. console.log(getDate("30-1-2003"));
  7. // → Thu Jan 30 2003 00:00:00 GMT+0100 (CET)

_(下划线)绑定被忽略,并且只用于跳过由exec返回的数组中的,完整匹配元素。