3.Date類型
3.1創建一個Date對象
let now = new Date();
在調用Date 構造函數而不傳遞參數的情況下,新創建的對象自動獲得當前日期和時間。如果想根據特定的日期和時間創建日期對象,必須傳入表示該日期的毫秒數(即從UTC 時間1970 年1 月1 日午夜起至該日期止經過的毫秒數)
let date1 = new Date("May 25, 2004");//英文格式
let date2 = new Date(2005, 4, 5, 17, 55, 55); //年月日時分秒順序傳入(月份加一,注意一下此處)
后臺自動調用Date.parse()和Date.UTC()方法
ECMAScript 5 添加了Data.now()方法,返回表示調用這個方法時的日期和時間的毫秒數。這個方法簡化了使用Data 對象分析代碼的工作。
let start = Date.now();
//調用函數
doSomething();
//取得停止時間
let stop = Date.now(),
result = stop – start;
支持Data.now()方法的瀏覽器包括IE9+、Firefox 3+、Safari 3+、Opera 10.5 和Chrome。在不支持它的瀏覽器中,使用+操作符把Data 對象轉換成字符串,也可以達到同樣的目的。
3.2繼承方法
關于toLocaleString()和toString()不想再做太多贅述,這兩個方法在不同的瀏覽器中返回的日期和時間格式可謂大相徑庭。事實上,toLocaleString()和toString()的這一差別僅在調試代碼時比較有用,而在顯示日期和時間時沒有什么價值。
至于Date 類型的valueOf()方法,則根本不返回字符串,而是返回日期的毫秒表示。因此,可以方便使用比較操作符(小于或大于)來比較日期值。
let date1 = new Date(2007, 0, 1); //"January 1, 2007"
let date2 = new Date(2007, 1, 1); //"February 1, 2007"
alert(date1 < date2); //true
alert(date1 > date2); //false
從邏輯上講,2007 年1 月1 日要早于2007 年2 月1 日,此時如果我們說前者小于后者比較符合常理。而表示2007 年1 月1 日的毫秒值小于表示2007 年2 月1 日的毫秒值,因此在首先使用小于操作符比較日期時,返回的結果是true。這樣,就為我們比較日期提供了極大方便。
3.3日期格式化方法
Date 類型還有一些專門用于將日期格式化為字符串的方法,這些方法如下。
- toDateString()——以特定于實現的格式顯示星期幾、月、日和年;
- toTimeString()——以特定于實現的格式顯示時、分、秒和時區;
- toLocaleDateString()——以特定于地區的格式顯示星期幾、月、日和年;
- toLocaleTimeString()——以特定于實現的格式顯示時、分、秒;
- toUTCString()——以特定于實現的格式完整的UTC 日期。
與toLocaleString()和toString()方法一樣,以上這些字符串格式方法的輸出也是因瀏覽器而異的,因此沒有哪一個方法能夠用來在用戶界面中顯示一致的日期信息。
除了前面介紹的方法之外,還有一個名叫toGMTString()的方法,這是一個與
toUTCString()等價的方法,其存在目的在于確保向后兼容。不過,ECMAScript 推薦現在編寫的代碼一律使用toUTCString()方法。
3.4日期/時間組件方法
到目前為止,剩下還未介紹的Date 類型的方法(如下表所示),都是直接取得和設置日期值中特定部分的方法了。需要注意的是,UTC 日期指的是在沒有時區偏差的情況下(將日期轉換為GMT 時間)的日期值。
方法 | 說明 |
---|---|
getTime() | 返回表示日期的毫秒數;與valueOf()方法返回的值相同 |
setTime(毫秒) | 以毫秒數設置日期,會改變整個日期 |
getFullYear() | 取得4位數的年份(如2007而非僅07) |
getUTCFullYear() | 返回UTC日期的4位數年份 |
setFullYear(年) | 設置日期的年份。傳入的年份值必須是4位數字(如2007而非僅07) |
setUTCFullYear(年) | 設置UTC日期的年份。傳入的年份值必須是4位數字(如2007而非僅07) |
getMonth() | 返回日期中的月份,其中0表示一月,11表示十二月 |
getUTCMonth() | 返回UTC日期中的月份,其中0表示一月,11表示十二月 |
setMonth(月) | 設置日期的月份。傳入的月份值必須大于0,超過11則增加年份 |
setUTCMonth(月) | 設置UTC日期的月份。傳入的月份值必須大于0,超過11則增加年份 |
getDate() | 返回日期月份中的天數(1到31) |
getUTCDate() | 返回UTC日期月份中的天數(1到31) |
setDate(日) | 設置日期月份中的天數。如果傳入的值超過了該月中應有的天數,則增加月份 |
setUTCDate(日) | 設置UTC日期月份中的天數。如果傳入的值超過了該月中應有的天數,則增加月份 |
getDay() | 返回日期中星期的星期幾(其中0表示星期日,6表示星期六) |
getUTCDay() | 返回UTC日期中星期的星期幾(其中0表示星期日,6表示星期六) |
getHours() | 返回日期中的小時數(0到23) |
getUTCHours() | 返回UTC日期中的小時數(0到23) |
setHours(時) | 設置日期中的小時數。傳入的值超過了23則增加月份中的天數 |
setUTCHours(時) | 設置UTC日期中的小時數。傳入的值超過了23則增加月份中的天數 |
getMinutes() | 返回日期中的分鐘數(0到59) |
getUTCMinutes() | 返回UTC日期中的分鐘數(0到59) |
setMinutes(分) | 設置日期中的分鐘數。傳入的值超過59則增加小時數 |
setUTCMinutes(分) | 設置UTC日期中的分鐘數。傳入的值超過59則增加小時數 |
getSeconds() | 返回日期中的秒數(0到59) |
getUTCSeconds() | 返回UTC日期中的秒數(0到59) |
setSeconds(秒) | 設置日期中的秒數。傳入的值超過了59會增加分鐘數 |
setUTCSeconds(秒) | 設置UTC日期中的秒數。傳入的值超過了59會增加分鐘數 |
getMilliseconds() | 返回日期中的毫秒數 |
getUTCMilliseconds() | 返回UTC日期中的毫秒數 |
setMilliseconds(毫秒) | 設置日期中的毫秒數 |
setUTCMilliseconds(毫秒) | 設置UTC日期中的毫秒數 |
getTimezoneOffset() | 返回本地時間與UTC時間相差的分鐘數。例如,美國東部標準時間返回300。在某地進入夏令時的情況下,這個值會有所變化 |