Date類型使用自UTC(國(guó)際協(xié)調(diào)時(shí)間)1970年1月1日午夜(0時(shí))開(kāi)始經(jīng)過(guò)的毫秒數(shù)來(lái)保存日期。要?jiǎng)?chuàng)建一個(gè)日期對(duì)象,使用new操作符和Date構(gòu)造函數(shù)即可:
var now = new Date();
在調(diào)用Date構(gòu)造函數(shù)而不傳遞參數(shù)的情況下,新創(chuàng)建的對(duì)象自動(dòng)獲得當(dāng)前日期和時(shí)間。如果想根據(jù)特定的日期和時(shí)間創(chuàng)建時(shí)期對(duì)象,必須傳入表示該日期的毫秒數(shù)。為了簡(jiǎn)化這一計(jì)算過(guò)程,javascript提供了兩個(gè)方法:Date.parse()和Date.UTC()。
其中,Date.parse()方法接收一個(gè)表示日期的字符串參數(shù),然后嘗試根據(jù)這個(gè)字符串返回相應(yīng)日期的毫秒數(shù)。ECMA-262沒(méi)有定義Date.parse()應(yīng)該支持哪種日期格式,因此這個(gè)方法的行為因?qū)崿F(xiàn)而異,而且通常是因地區(qū)而異。將地區(qū)設(shè)置為美國(guó)的瀏覽器通常都接受下列日期格式:
"月/日/年",如 6/13/2004
"英文月名 日,年",如January 12,2004
"英文星期幾 英文月名 日 年 時(shí):分:秒 時(shí)區(qū)",如Tue May 25 2004 00:00:00 GMT-0700
例如,要為2004年5月25日創(chuàng)建一個(gè)日期對(duì)象,可以使用下面的代碼:
var someDate = new Date(Date.parse("May 25,2004"));
如果傳入Date.parse()方法的字符串不能表示日期,那么它會(huì)返回NaN。實(shí)際上,如果直接將表示日期的字符串傳遞給Date構(gòu)造函數(shù),也會(huì)在后臺(tái)調(diào)用Date.parse()。換句話說(shuō),下面的代碼與前面的例子是等價(jià)的:
var someDate = new Date("May 25,2004");
Date.UTC()方法同樣也返回表示日期的毫秒數(shù),介它與Date.parse()在構(gòu)建值時(shí)使用不同的信息。Date.UTC()的參數(shù)分別是年份,基于0的月份(一月是0,二月是1,以此類推),月中的哪一天(1~31),小時(shí)數(shù)(0~23),分鐘,秒以及毫秒數(shù)。在這些參數(shù)中,只有前兩個(gè)參數(shù)(年和月)是必需的。如果沒(méi)有提供月中的天數(shù),則假設(shè)天數(shù)為1。如果省略其他參數(shù),則統(tǒng)統(tǒng)假設(shè)為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));
如同模仿Date.parse()一樣,Date構(gòu)造函數(shù)也會(huì)模仿Date.UTC(),但有一點(diǎn)明顯不同:日期和時(shí)間都基于本地時(shí)區(qū)而非GMT來(lái)創(chuàng)建。不過(guò),Date構(gòu)造函數(shù)接收的參數(shù)仍然與Date.UTC()相同。因此,如果第一個(gè)參數(shù)是數(shù)值,Date構(gòu)造函數(shù)就會(huì)假設(shè)該值是日期中的年份,而第二個(gè)參數(shù)是月份,以此類推:
//本地時(shí)間2000年1月1日午夜0時(shí)
var y2k = new Date(2000,0);
//本地時(shí)間2005年5月5日下午5:55:55
var allFives = new Date(2005,4,5,17,55,55);
更多信息請(qǐng)查看IT技術(shù)專欄