創(chuàng)建一個(gè)日期對(duì)象:
var now = new Date();
調(diào)用Date構(gòu)造函數(shù)而不傳遞參數(shù),則新創(chuàng)建的對(duì)象自動(dòng)獲得當(dāng)前日期和時(shí)間。
如果想根據(jù)特定的日期和時(shí)間創(chuàng)建日期對(duì)象,則需傳入表示該日期的毫秒數(shù)(即從UTC時(shí)間1970年1月1日午夜起至該日期止經(jīng)過(guò)的毫秒數(shù))。
ECMAScript為簡(jiǎn)化此過(guò)程提供了兩種方法:
Date.parse():
param:表示日期的字符串參數(shù)
return:根據(jù)字符串返回相應(yīng)日期的毫秒數(shù);若傳入的字符串不能表示日期,則返回NaN
字符串格式:
- “月/日/年”,
new Date(Date.parse("6/13/2014")); - “英文月名 日,年”,
new Date(Date.parse("January 12,2004")); - “英文星期幾 英文名月名 日 年 時(shí):分:秒 時(shí)區(qū)”,
new Date(Date.parse("Tue May 25 2004 00:00:00 GMT-0700")); - ISO 8601擴(kuò)展模式 YYYY-MM-DDTHH:mm:ss.sssZ,
new Date(Date.parse("2004-05-25T00:00:00"));(只有兼容ECMAScript 5的實(shí)現(xiàn)支持此格式)
var someDate = new Date(Date.parse("May 25,2004"));
//若直接傳字符串,則會(huì)在后臺(tái)調(diào)用Date.parse()
var someDate = new Date("May 25,2004");
Date.UTC():
param:表示日期的字符串參數(shù)
return:根據(jù)字符串返回相應(yīng)日期的毫秒數(shù)
字符串格式:年份、基于0的月份(0-11)、月中的哪一天(1-31)、小時(shí)數(shù)(0-23)、分鐘、秒以及毫秒數(shù)。只有年、月是必須的。若沒(méi)有提供月中的天數(shù),則默認(rèn)為1;若省略其他參數(shù),則都默認(rèn)為0。
//示例
//GMT時(shí)間2000年1月1日午夜零時(shí)
var y2k = new Date(Date.UTC(2000,0));
//GMT時(shí)間2005年5月5日下午5:55:55
var allFives = new Date(Date.UTC(2005,4,5,17,55,55));
這里很奇怪,紅皮書(shū)上說(shuō)的是默認(rèn)設(shè)為0,但是我在Chrome上輸出下面代碼中y2k變量,得到的結(jié)果是Sat Jan 01 2000 08:00:00 GMT+0800,并不是午夜0時(shí)。
Date構(gòu)造函數(shù)也會(huì)模仿Date.UTC(),但是日期和時(shí)間是基于本地而非GMT來(lái)創(chuàng)建。
本地時(shí)間輸出,默認(rèn)確實(shí)全設(shè)為0了。
//等價(jià)簡(jiǎn)寫(xiě)
//本地時(shí)間2000年1月1日午夜零時(shí)
var y2k = new Date(2000,0);
//本地時(shí)間2005年5月5日下午5:55:55
var allFives = new Date(2005,4,5,17,55,55);
ECMAScript 5添加了Date.new()方法,返回表示調(diào)用這個(gè)方法時(shí)的日期和時(shí)間的毫秒數(shù)。這個(gè)方法簡(jiǎn)化了使用Date對(duì)象分析代碼的工作。例如:
//取得開(kāi)始時(shí)間
var start = new Date();
//調(diào)用函數(shù)
doSomething();
//取得停止時(shí)間
var stop = new Date(),
result = stop - start;