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