JavaScript引用類型——Date類型

Date類型

Date類型使用自UTC(Coordinated Universal Time,國際協(xié)調(diào)時間) 1970年1月1日午夜(零食)開始經(jīng)過的毫秒數(shù)來保存日期。在使用這種數(shù)據(jù)存儲格式的條件下,Date類型保存的日期能夠精確到1970年1月1日之前或之后的100000000年。
要創(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ù)(即從UTC時間1980年1月1日午夜起至改日期經(jīng)過的毫秒數(shù))。為了簡化這一計(jì)算過程,ECMAScript提供了兩個方法:Date.parse()Date.UTC()。

  • Date.parse()方法接收一個表示日期的字符串參數(shù),然后嘗試根據(jù)這個字符串返回相應(yīng)日期的毫秒數(shù)。ECMA-262沒有定義Date.parse()應(yīng)該支持哪種日期格式,因此這個方法的行為因?qū)崿F(xiàn)而異,而且通常是因地區(qū)而異。如:
  • "月/日/年",如6/14/2014;
  • "英文月名 日,年",如January 12,2013;
  • "英文星期幾 英文月名 日 年 時:分:秒 時區(qū)",如 Tue May 25 2012 00:00:00 GMT-0700。
  • ISO 8601 擴(kuò)展格式 YYYY-MM-DDTHH:mm:ss.sssZ(例如 2012-03-12T00:00:00)只有兼容ECMAScript5的實(shí)現(xiàn)支持這種格式。

例如,為2004年5月24日創(chuàng)建一個日期對象,可以使用下面的代碼:

var someDate = new Date(Date.parse("May 25, 2004"));

如果傳入Date.parse()方法的字符串不能表示日期,它會返回NaN。實(shí)際上,直接將表示日期的字符串傳遞給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(),但有一點(diǎn)明顯不同:日期和時間都是基于本地時間而非GMT來創(chuàng)建。不過,Date構(gòu)造函數(shù)接收的參數(shù)仍然與Date.UTC()相同。

//本地時間 2000年 1月 1日 午夜零時
var y2k = new Date(2000,0);
//本地時間 2005年 5月 5日 下午5:55:55
var allFives = new Date(2005, 4, 5, 17, 55, 55);
  • ECMAScrit5添加了Date.now()方法,表示調(diào)用這個方法時的日期和時間的毫秒數(shù)。
//取得開始時間
var start = Date.now();
//調(diào)用函數(shù)
doSomething();
//取得停止時間
var stop = new Date(),
    result = stop - start;

在不支持Date.now()方法的瀏覽器,使用+操作符獲取Date對象的時間戳,也可以達(dá)到同樣的目的。

//取得開始時間
var start = Date.now();
//調(diào)用函數(shù)
doSomething();
//取得停止時間
var stop = +new Date(),
    result = stop - start;
  • 1. 繼承的方法
    與其他引用類型一樣,Date類型也重寫了toLocalString()、toString()和valueOf()方法。但這些方法的返回值與其他方法中的不同。
    Date類型的toLocalString()方法會按照于瀏覽器設(shè)置的地區(qū)相適應(yīng)的格式返回日期和時間。toString()方法通常放回帶有時區(qū)信息的日期和時間。valueOf()方法不返回字符串,返回日期的毫秒表示??梢苑奖闶褂帽容^操作符來比較日期值。
var date1 = new Date(2007,0,1);
var date2 = new Date(2007,1,1);
alert(date1<date2); //true
alert(date1>date2); //false
  • 2. 日期格式化方法
    Date類型還有以下專門用于將日期格式化為字符串的方法,如:
  • toDateString()——以特定與實(shí)現(xiàn)的格式顯示星期幾、月、日和年
  • toTimeString()——以特定與實(shí)現(xiàn)的格式顯示時、分、秒和時區(qū)

  • toLocaleDateString()——以特定與地區(qū)的格式顯示星期幾、月、日和年

  • toLocaleTimeString()———以特定與實(shí)現(xiàn)的格式顯示時、分、秒

  • toUTCString()——以特定與實(shí)現(xiàn)的格式完整的UTC日期

  • 3. 日期/時間組件方法
    直接取得和設(shè)置日期值中特定部分的方法。UTC日期值得是在沒有時區(qū)偏差的情況下(將日期轉(zhuǎn)換為GMT時間)的日期值。

  • getTime():返回表示日期的毫秒數(shù);與valueOf方法返回的值相同
  • setTime(毫米):以毫秒數(shù)設(shè)置日期,會改變整個日期
  • getFullYear():取得4位數(shù)的年份(如2007而非07)
  • getUTCfFullYear():返回UTC日期的4位數(shù)年份
  • setFullYear(年):設(shè)置日期的年份。傳入的年分值必需是4位數(shù)字(如2007而非07)
    -setUTCFullYear(年):設(shè)置UTC日期的年份。傳入的年分值必需是4位數(shù)字(如2007而非07)
  • getMonth():放回日期中的月份,0表示一月,11表示十二月
  • getUTCMonth():回UTC日期中的月份,0表示一月,11表示十二月
  • setMonth(月):設(shè)置日期的月份,傳入的月份值必需大于0,超過11則增加年份
  • setUTCMonth(月):設(shè)置UTC日期的月份,傳入的月份值必需大于0,超過11則增加年份
  • getDate():返回日期月份中的天數(shù)(1到31)
  • getUTCDate():返回UTC日期月份中的天數(shù)(1到31)
  • setDate(日):設(shè)置日期月份中的天數(shù),如果傳入的值超過了該月中應(yīng)該有的天數(shù),則增加月份
  • setUTCDate(日):設(shè)置UTC日期月份中的天數(shù),如果傳入的值超過了該月中應(yīng)該有的天數(shù),則增加月份
  • getDay():返回日期中星期的星期幾(0表示星期日,6表示星期六)
  • getUTCDay():返回UTC日期中星期的星期幾(0表示星期日,6表示星期六)
  • getHours():返回日期中的小時數(shù)(0到23)
  • getUTCHours():返回UTC日期中的小時數(shù)(0到23)
  • setHours(時):設(shè)置日期中的小時數(shù)。傳入的值超過23則增加日期的天數(shù)
  • setUTCHours(時):設(shè)置UTC日期中的小時數(shù)。傳入的值超過23則增加日期的天數(shù)
  • getMinutes():返回日期中的分鐘數(shù)。(0到59)
  • getUTCMinutes():返回UTC日期中的分鐘數(shù)。(0到59)
  • setMinutes(分):設(shè)置日期中的分鐘數(shù)。傳入的值超過59增加小時數(shù)
  • setUTCMinutes(分):設(shè)置UTC日期中的分鐘數(shù)。傳入的值超過59增加小時數(shù)
  • getSeconds():返回日期中的秒數(shù)(0到59)
  • getUTCSeconds():返回UTC日期中的秒數(shù)(0到59)
  • setSeconds(秒):設(shè)置日期中的秒數(shù)。傳入的值超過59增加分鐘數(shù)
  • setUTCSeconds(秒):設(shè)置UTC日期中的秒數(shù)。傳入的值超過59增加分鐘數(shù)
  • getMilliseconds() : 返回日期的毫秒數(shù)
  • getUTCMilliseconde():返回UTC日期的毫秒數(shù)
  • setMilliseconds(秒):設(shè)置日期的毫秒數(shù)
  • setUTCMilliseconds(秒):設(shè)置UTC日期的毫秒數(shù)
  • getTimezoneOffset():返回本地時間與UTC時間相差的分鐘數(shù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容