Date 類型提供了有關日期和時間的信息,包括當前日期和時間以及相關的計算功能钱床。
創(chuàng)建日期對象:
var now = new Date();
構造函數(shù)不傳參數(shù)情況下吼畏,新對象自動獲得當前日期和時間。
如果想要更具特定的日期和時間創(chuàng)建日期對象蛤签,必須傳入表示該日期的毫秒數(shù)(即從UTC時間1970年1月1日午夜起至該日期止經(jīng)過的毫秒數(shù))。
為了簡化這一計算過程栅哀,ECMAScript 提供了兩個方法:
-
Date.parse():該方法接受一個表示日期的字符串參數(shù)震肮,然后嘗試根據(jù)這個字符串返回相應日期的毫秒數(shù)。
ECMA-262沒有定義 Date.parse() 應該支持那種日期格式留拾,因此這個方法的行為因?qū)崿F(xiàn)而異戳晌,而且通常是因地區(qū)而異。
"月/日/年"痴柔,如 "6/13/2004"沦偎。
"因為月名 日,年"咳蔚,如 "January 12,2004"豪嚎。
"因為星期幾 因為月名 日 年 時:分:秒 時區(qū)",如 "TueMay 25 2004 00:00:00 GMT-0770"谈火。
-
ISO 8601擴展格式YYYY-MM-DDTHH:mmSS.SSZ (例如:"2004-05-25T00:00:00")侈询。只有兼容ECMAScript 5的實現(xiàn)支持這種格式。
在一次項目的擴展中糯耍,使用 YYYY-MM-DDTHH:mmSS.SSZ 這個格式在 Safari 上就出現(xiàn)無法解析的問題扔字,解決方式是把 '-' 轉(zhuǎn) 成 '/'。
// 創(chuàng)建 2004年5月25日的一個日期對象 var someDate = new Date(Date.parse("May 25,2004")); // 如果傳入Date.parse() 方法的字符串不能表示日期温技,那么它會返回NAN革为。實際上,如果直接將表示日期的字符創(chuàng)傳遞給Date構造函數(shù)舵鳞,也會在后臺調(diào)用 Date.parse(): var someDate = new Date("May 25,2004"); // 這句代碼與上句代碼是等價的
日期對象在不同瀏覽器中的實現(xiàn)有許多起卦的行為篷角。其中有一種傾向是將超出范圍的值替換成當前值,以便生成輸出系任。
例如:在接續(xù) "January 32,2007"時恳蹲,有的瀏覽器會將其解釋為 "February 1,2007"。而Opera則傾向于插入當前月份的當前日期俩滥,返回 "January當前日期嘉蕾,2007"。
也就是說霜旧,如果在2007年9月21日運行前面的代碼错忱,將會得到 "January 21,2007"(都是21日)儡率。
Date.UTC():
Date.UTC()方法同樣也返回表示日期的毫秒數(shù),但它與 Date.parse() 在構建值時使用不同的信息以清。
- 參數(shù)一:年份儿普、基于0的月份(一月是0,二月是1掷倔,以此類推)
- 參數(shù)二:月中的哪一天(1到31)
- 參數(shù)三:小時數(shù)(0到23)
- 參數(shù)四:分鐘
- 參數(shù)五:秒
- 參數(shù)六:毫秒數(shù)
在這些參數(shù)中只有前兩個參數(shù)(年和月)是必需的眉孩。
// GMT時間2000年1月1日午夜零時
var y2k = new Date(Date.UTC(2000, 0));
// GMT時間2005年5月5日下午5.:55:55
var allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));
// 本地時間2000年1月1日午夜零時
var y2k_1 = new Date(2000, 0);
// 本地時間2005年5月5日下午5:55:55
var allFives_1 = new Date(2005, 4, 5, 17, 55, 55);
ECMAScript 5 添加了 Date.now() 方法,返回表示調(diào)用這個方法時的日期和時間的毫秒數(shù)勒葱。這個方法簡化了使用Date對象分析代碼的工作浪汪。
// 取得開始時間
var start = Date.now();
// 調(diào)用函數(shù)
doSomething()
// 取得停止時間
var stop = Date.now(),
result = stop - start;
獲取一個方法的執(zhí)行時間毫秒值
支持 Date.now() 方法的瀏覽器包括 IE9+、Firefox 3+凛虽、Safari 3+死遭、Opera 10.5和Chrome。
// 取得開始時間
var start = +new Date();
// 調(diào)用函數(shù)
doSomething()
// 取得停止時間
var stop = +new Date();
result = stop - start;
在不支持 Date.now() 方法的瀏覽器中凯旋,使用 '+' 操作符把Data對象轉(zhuǎn)換成字符串呀潭,也可以得到毫秒值。
比較 Date 的大小
Date 類型的 ValueOf() 方法至非,不返回字符串钠署,而是返回日期的毫秒表示。因此睡蟋,可以方便使用比較操作符(大于或小于)來比較日期值踏幻。
var date1 = new Date(2007, 0, 1);
var date2 = new Date(2007, 1, 1);
alert(date1 < date2) // true
alert(date1 > date2) // false
日期格式化
Date 類型還有一些專門用于將日期格式化為字符串的方法:
- toDateString():
new Date().toDateString() // "Tue Oct 18 2016"
- toTimeString():
new Date().toTimeString() // "23:29:12 GMT+0800 (CST)"
- toLocaleDateString():
new Date().toLocaleDateString() // "2016/10/18"
- toLocaleTimeString():
new Date().toLocaleTimeString() // "下午11:30:28"
- toUTCString():
new Date().toUTCString() // "Tue, 18 Oct 2016 15:30:53 GMT"
日期/時間組件方法
方法 | 說明 |
---|---|
getTime() | 返回表示日期的毫秒數(shù):與valueOf()方法返回的值相同 |
setTime(毫秒) | 以毫秒數(shù)設置日期枷颊,會改變整個日期 |
getFullYear() | 獲取四位數(shù)的年豐(如 2007而非07) |
getUTCFullYear() | 返回UTC日期的4位數(shù)年份 |
setFullYear(年) | 設置日起的年份戳杀,傳入的年分支必須是4為數(shù)字(如 2007而非07) |
setUTCFullYear(年) | 設置UTC日期的年份。傳入的年份值必須是4位數(shù)字(如 2007而非07) |
getMonth() | 返回日期中的月份夭苗,其中0表示一月信卡,11表示十二月 |
getUTCMonth() | 返回UTC日期中的月份,其中0表示一月题造,11表示十二月 |
setMonth() | 設置日期的月份傍菇。傳入的月份值必須大于0,超過11則增加年份 |
setUTCMonth() | 設置UTC日期的月份界赔。傳入的月份值必須大于0丢习,超過11則增加年份 |
getDate() | 返回日期月份中的天數(shù)(1到31) |
getUTCDate() | 返回UTC日期月份中的天數(shù)(1到31) |
setDate() | 設置日期月份中的天數(shù)。如果傳入的值超過了該月中應有的天數(shù)淮悼,則增加月份 |
setUTCDate(日) | 設置UTC日期月份中的天數(shù)咐低。如果傳入的值超過了該月中應有的天數(shù),則增加月份 |
getDay() | 返回日期中清氣得星期幾(其中0表示星期日袜腥,6表示星期六) |
getUTCDay() | 返回UTC日期中清氣得星期幾(其中0表示星期日见擦,6表示星期六) |
getHours() | 返回日期中的小時數(shù)(0到23) |
getUTCHours() | 返回UTC日期中的小時數(shù)(0到23) |
setHours(時) | 設置日期中的小時數(shù),傳入的超過了23則增加月份中的天數(shù) |
setUTCHours(時) | 設置UTC日期中的小時數(shù),傳入的超過了23則增加月份中的天數(shù) |
getMinutes() | 返回日期中的分鐘數(shù)(0到59) |
getUTCMinutes() | 返回UTC日期中的分鐘數(shù)(0到59) |
settMinutes(分) | 設置日期中的分鐘數(shù)鲤屡。傳入的值超過59則增加小時數(shù) |
settUTCMinutes(分) | 設置UTC日期中的分鐘數(shù)损痰。傳入的值超過59則增加小時數(shù) |
getSeconds() | 返回日期中的秒數(shù)(0到59) |
getUTCSeconds() | 返回UTC日期中的秒數(shù)(0到59) |
setSeconds(秒) | 設置日期中的秒數(shù),傳入的值超過59則增加分鐘數(shù) |
setUTCSeconds(秒) | 設置UTC日期中的秒數(shù)酒来,傳入的值超過59則增加分鐘數(shù) |
getMillSeconds() | 返回日期中的毫秒數(shù) |
getUTCMillSeconds() | 返回UTC日期中的毫秒數(shù) |
settMillSeconds() | 設置日期中的毫秒數(shù) |
settUTCMillSeconds() | 設置UTC日期中的毫秒數(shù) |
getTimezoneOffset() | 返回本地時間與UTC時間相差的分鐘數(shù)卢未。例如:美國東部標準時間返回300。在某地進入夏令時的情況下役首,這個值會有所變化 |