ECMAScript Date類型 parse()、UTC()操作方法
ECMAScript中的Date類型是在早期Java中的java.util.Date類基礎上杓建的。為此,Date類型使用自UTC(Coordinated Universal Time,國際協(xié)調時間)1970年1月1日午夜(零時)開始經過的毫秒數來保存日期。在使用這種數據存儲格式的條件下,Date類型保存的日期能夠精確到1970年1月1日之前或之后的285 616年。 要創(chuàng)建一個日期對象,使用new操作符和Date構造函數即可,如下所示:
var now=new Date();
在調用Date構造函數而不傳遞參數的情況下,新創(chuàng)建的對象自動獲得當前日期和時間。如果想根據特定的日期和時間創(chuàng)建日期對象,必須傳人表示該日期的毫秒數(即從UTC時間1970年1月1日午夜起至該日期止經過的毫秒數)。為了簡化這一計算過程,ECMAScript提供了兩個方法:Date.parse()和Date.UTC()。
其中,Date.parse)方法接收一個表示日期的字符串參數,然后嘗試根據這個字符串返回相應日期的毫秒數。ECMA-262沒有定義Date.parse()應該支持哪種日期格式,因此這個方法的行為因實現而異,而且通常是因地區(qū)而異。將地區(qū)設置為美國的瀏覽器通常都接受下列日期格式:
◎“月/日/年”,如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構造函數,也會在后臺調用Date.parse()。換句話說,下面的代碼與前面的例子是等價的: var someDate=new Date( "May 25, 2004");
這行代碼將會得到與前面相同的日期對象。
南昌網站建設公司前端開發(fā)工程師提醒,Date對象及其在不同瀏覽器中的實現有許多奇怪的行為,其中有一種傾向是將超出范圍的值替換成當前的值,以便生成輸出.例如,在解析"January 32,2007"時有的瀏覽器會將其解釋為"Febunary 1 ,2007".而Opera則傾向于插入當前月份的當前日期,返回"January 當前日期,2007"。也就是說,如果在2007年9月21日運行前面的代碼,將會得到“January 21,2007”(都是21日).
Date .UTC()方法同樣也返回表示日期的毫秒數,但它與Date.parse()在構建值時使用不同的信息。Date.UTC()的參數分別是年份、基于0的月份(一月是0,二月是1,以此類推)、月中的哪一天(1到31)、小時數(0到23)、分鐘、秒以及毫秒數。在這些參數中,只有前兩個參數(年和月)是必需的。如果沒有提供月中的天數,則假設天數為1;如果省略其他參數,則統(tǒng)統(tǒng)假設為0。以下是兩個使用Date.UTC()方法的例子:
//GMT時間2000年1月1日午夜零時
var y2k=new Date (Date.UTC (2000,O));
//GMT時間2005年5月5日下午5:55:55
var allFives=new Date (Date.UTC (2005,4, 5, 17, 55, 55));
南昌做網站公司提示,這個例子創(chuàng)建了兩個日期對象。第一個對象表示GMT時間2000年1月1日午夜零時,傳人的值一個是表示年份的2000,一個是表示月份的O(即一月份)。因為其他參數是自動填充的(即月中的天數為1,其他所有參數均為0),所以結果就是該月第一天的午夜零時。第二個對象表示GMT時間2005年5月5日下午5:55:55,即使日期和時間中只包含5,也需要傳人不一樣的參數:月份必須是4(因為月份是基于0的)、小時必須設置為17(因為小時以0到23表示),剩下的參數就很直觀了。
如同模仿Date.parse() -樣,Date構造函數也會模仿Date.UTC(),但有一點明顯不同:日期和時間都基于本地時區(qū)而非GMT來創(chuàng)建。不過,Date構造函數接收的參數仍然與Date.UTC()相同。
因此,如果第一個參數是數值,Date構造函數就會假設該值是日期中的年份,而第二個參數是月份,以此類推。據此,可以將前面的例子重寫如下:
//本地時間2 000年1月1日午夜零時
var y2k=new Date(2000, 0);
//本地時間2005年5月5日下午5:55:55
var allFives=new Date (2005,4, 5,17, 55, 55);
以上代碼創(chuàng)建了與前面例子中相同的兩個日期對象,只不過這次的日期都是基于系統(tǒng)設置的本地時區(qū)創(chuàng)建的。
希望本文對廣大站長或從事企業(yè)網站建設公司的團隊有所幫助,如對此不太理解的,可以與南昌做網站公司百恒網絡技術部聯系。我們很高興與廣大站長和從事企業(yè)網站建設公司技術人員分享我們的技術和經驗。