表示日期和时间

注意: Date 对象现在被认为是遗留特性,在新代码中应避免使用。我们将尽快更新此页面,提供现代替代方案。

Date 对象

JavaScript 没有日期数据类型。然而,你可以使用 Date 对象及其方法在你的应用程序中处理日期和时间。Date 对象有大量用于设置、获取和操作日期的方法。它没有任何属性。

JavaScript 处理日期的方式与 Java 类似。这两种语言有许多相同的日期方法,并且都将日期存储为自 UTC 1970 年 1 月 1 日午夜开始以来的毫秒数,而 Unix 时间戳是自同一时刻以来的秒数。UTC 1970 年 1 月 1 日午夜的时刻被称为 epoch

Date 对象的范围是相对于 epoch 的 -100,000,000 天到 100,000,000 天。

创建 Date 对象

js
const dateObjectName = new Date([parameters]);

其中 dateObjectName 是正在创建的 Date 对象的名称;它可以是一个新对象或现有对象的属性。

在没有 new 关键字的情况下调用 Date 会返回一个表示当前日期和时间的字符串。

上述语法中的 parameters 可以是以下任何一种

  • 无:创建今天的日期和时间。例如,today = new Date();
  • 表示日期的字符串,有多种不同形式。支持的具体形式因引擎而异,但始终支持以下形式:YYYY-MM-DDTHH:mm:ss.sssZ。例如,xmas95 = new Date("1995-12-25")。如果你省略小时、分钟或秒,它们的值将设置为零。
  • 一组表示年、月、日的整数值。例如,xmas95 = new Date(1995, 11, 25)
  • 一组表示年、月、日、小时、分钟和秒的整数值。例如,xmas95 = new Date(1995, 11, 25, 9, 30, 0);

Date 对象的方法

Date 对象用于处理日期和时间的方法大致分为以下几类

  • “set”方法,用于设置 Date 对象中的日期和时间值。
  • “get”方法,用于从 Date 对象中获取日期和时间值。
  • “to”方法,用于从 Date 对象返回字符串值。
  • parse 和 UTC 方法,用于解析 Date 字符串。

使用“get”和“set”方法,你可以分别获取和设置秒、分钟、小时、月份中的日期、星期几、月份和年份。有一个 getDay 方法返回星期几,但没有相应的 setDay 方法,因为星期几是自动设置的。这些方法使用整数表示这些值,如下所示

  • 秒和分钟:0 到 59
  • 小时:0 到 23
  • 星期:0(星期日)到 6(星期六)
  • 日期:1 到 31(月份中的日期)
  • 月份:0(一月)到 11(十二月)
  • 年份:自 1900 年以来的年份

例如,假设你定义以下日期

js
const xmas95 = new Date("1995-12-25");

那么 xmas95.getMonth() 返回 11,而 xmas95.getFullYear() 返回 1995。

getTimesetTime 方法对于比较日期很有用。getTime 方法返回自 epoch 以来 Date 对象的毫秒数。

例如,以下代码显示当前年份剩余的天数

js
const today = new Date();
const endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // Set day and month
endYear.setFullYear(today.getFullYear()); // Set year to this year
const msPerDay = 24 * 60 * 60 * 1000; // Number of milliseconds per day
let daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
daysLeft = Math.round(daysLeft); // Returns days left in the year

此示例创建了一个名为 todayDate 对象,其中包含今天的日期。然后它创建了一个名为 endYearDate 对象,并将其年份设置为当前年份。然后,使用每天的毫秒数,它使用 getTime 计算 todayendYear 之间的天数,并四舍五入到整数天数。

parse 方法对于将日期字符串中的值分配给现有 Date 对象很有用。例如,以下代码使用 parsesetTime 将日期值分配给 ipoDate 对象

js
const ipoDate = new Date();
ipoDate.setTime(Date.parse("Aug 9, 1995"));

示例

在以下示例中,函数 JSClock() 以数字时钟的格式返回时间。

js
function JSClock() {
  const time = new Date();
  const hour = time.getHours();
  const minute = time.getMinutes();
  const second = time.getSeconds();
  let temp = String(hour % 12);
  if (temp === "0") {
    temp = "12";
  }
  temp += (minute < 10 ? ":0" : ":") + minute;
  temp += (second < 10 ? ":0" : ":") + second;
  temp += hour >= 12 ? " P.M." : " A.M.";
  return temp;
}

JSClock 函数首先创建一个名为 time 的新 Date 对象;由于没有给出参数,time 是用当前日期和时间创建的。然后调用 getHoursgetMinutesgetSeconds 方法将当前小时、分钟和秒的值分配给 hourminutesecond

以下语句根据时间构建一个字符串值。第一个语句创建变量 temp。它的值是 hour % 12,即 12 小时制中的 hour。然后,如果小时是 0,它会被重新赋值为 12,以便午夜和中午显示为 12:00 而不是 0:00

下一个语句将 minute 值附加到 temp。如果 minute 的值小于 10,则条件表达式会添加一个带前导零的字符串;否则,它会添加一个带分隔冒号的字符串。然后,一个语句以相同的方式将秒值附加到 temp

最后,如果 hour 是 12 或更大,则条件表达式将“P.M.”附加到 temp;否则,它将“A.M.”附加到 temp