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 物件
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 年以來的年份
例如,假設你定義以下日期
const xmas95 = new Date("1995-12-25");
那麼 xmas95.getMonth() 返回 11,而 xmas95.getFullYear() 返回 1995。
getTime 和 setTime 方法對於比較日期很有用。getTime 方法返回自 epoch 以來 Date 物件的毫秒數。
例如,以下程式碼顯示當前年份剩餘的天數
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
此示例建立了一個名為 today 的 Date 物件,其中包含今天的日期。然後它建立了一個名為 endYear 的 Date 物件,並將其年份設定為當前年份。然後,使用每天的毫秒數,它使用 getTime 計算 today 和 endYear 之間的天數,並四捨五入到整數天數。
parse 方法對於將日期字串中的值分配給現有 Date 物件很有用。例如,以下程式碼使用 parse 和 setTime 將日期值分配給 ipoDate 物件
const ipoDate = new Date();
ipoDate.setTime(Date.parse("Aug 9, 1995"));
示例
在以下示例中,函式 JSClock() 以數字時鐘的格式返回時間。
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 是用當前日期和時間建立的。然後呼叫 getHours、getMinutes 和 getSeconds 方法將當前小時、分鐘和秒的值分配給 hour、minute 和 second。
以下語句根據時間構建一個字串值。第一個語句建立變數 temp。它的值是 hour % 12,即 12 小時制中的 hour。然後,如果小時是 0,它會被重新賦值為 12,以便午夜和中午顯示為 12:00 而不是 0:00。
下一個語句將 minute 值附加到 temp。如果 minute 的值小於 10,則條件表示式會新增一個帶前導零的字串;否則,它會新增一個帶分隔冒號的字串。然後,一個語句以相同的方式將秒值附加到 temp。
最後,如果 hour 是 12 或更大,則條件表示式將“P.M.”附加到 temp;否則,它將“A.M.”附加到 temp。