表示日期和時間

注意: 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