日期和时间

186 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

让我们来学习一个新的内建对象:日期(Date)。该对象存储日期和时间,并提供了日期/时间的管理方法。

我们可以使用它来存储创建/修改时间,测量时间,或者仅用来打印当前时间。

创建

调用 new Date() 来创建一个新的 Date 对象。在调用时可以带有一些参数,如下所示:

  • new Date()

    不带参数 —— 创建一个表示当前日期和时间的 Date 对象:

    let now = new Date();
    alert( now ); // 显示当前的日期/时间
    
  • new Date(milliseconds)

    创建一个 Date 对象,其时间等于 1970 年 1 月 1 日 UTC+0 之后经过的毫秒数(1/1000 秒)。

    // 0 表示 01.01.1970 UTC+0
    let Jan01_1970 = new Date(0);
    alert( Jan01_1970 );
    
    // 现在增加 24 小时,得到 02.01.1970 UTC+0
    let Jan02_1970 = new Date(24 * 3600 * 1000);
    alert( Jan02_1970 );
    

    传入的整数参数代表的是自 1970-01-01 00:00:00 以来经过的毫秒数,该整数被称为 时间戳

    这是一种日期的轻量级数字表示形式。我们通常使用 new Date(timestamp) 通过时间戳来创建日期,并可以使用 date.getTime() 将现有的 Date 对象转化为时间戳(下文会讲到)。

    在 01.01.1970 之前的日期带有负的时间戳,例如:

    // 31 Dec 1969
    let Dec31_1969 = new Date(-24 * 3600 * 1000);
    alert( Dec31_1969 );
    
  • new Date(datestring)

    如果只有一个参数,并且是字符串,那么它会被自动解析。该算法与 Date.parse 所使用的算法相同,将在下文中进行介绍。

    let date = new Date("2017-01-26");
    alert(date);
    // 未指定具体时间,所以假定时间为格林尼治标准时间(GMT)的午夜零点
    // 并根据运行代码时的用户的时区进行调整
    // 因此,结果可能是
    // Thu Jan 26 2017 11:00:00 GMT+1100 (Australian Eastern Daylight Time)
    // 或
    // Wed Jan 25 2017 16:00:00 GMT-0800 (Pacific Standard Time)
    
  • new Date(year, month, date, hours, minutes, seconds, ms)

    使用当前时区中的给定组件创建日期。只有前两个参数是必须的。

    • year 应该是四位数。为了兼容性,也接受 2 位数,并将其视为 19xx,例如 98 与 1998 相同,但强烈建议始终使用 4 位数。
    • month 计数从 0(一月)开始,到 11(十二月)结束。
    • date 是当月的具体某一天,如果缺失,则为默认值 1
    • 如果 hours/minutes/seconds/ms 缺失,则均为默认值 0

    例如:

    new Date(2011, 0, 1, 0, 0, 0, 0); // 1 Jan 2011, 00:00:00
    new Date(2011, 0, 1); // 同样,时分秒等均为默认值 0
    

    时间度量最大精确到 1 毫秒(1/1000 秒):

    let date = new Date(2011, 0, 1, 2, 3, 4, 567);
    alert( date ); // 1.01.2011, 02:03:04.567
    

访问日期组件

从 Date 对象中访问年、月等信息有多种方式: