JavaScript - 時間對象 Date

Date 類型提供了有關日期和時間的信息,包括當前日期和時間以及相關的計算功能钱床。

創(chuàng)建日期對象:

var now = new Date();

構造函數(shù)不傳參數(shù)情況下吼畏,新對象自動獲得當前日期和時間。

如果想要更具特定的日期和時間創(chuàng)建日期對象蛤签,必須傳入表示該日期的毫秒數(shù)(即從UTC時間1970年1月1日午夜起至該日期止經(jīng)過的毫秒數(shù))。

為了簡化這一計算過程栅哀,ECMAScript 提供了兩個方法:

  • Date.parse():該方法接受一個表示日期的字符串參數(shù)震肮,然后嘗試根據(jù)這個字符串返回相應日期的毫秒數(shù)。

    • ECMA-262沒有定義 Date.parse() 應該支持那種日期格式留拾,因此這個方法的行為因?qū)崿F(xiàn)而異戳晌,而且通常是因地區(qū)而異。

    • "月/日/年"痴柔,如 "6/13/2004"沦偎。

    • "因為月名 日,年"咳蔚,如 "January 12,2004"豪嚎。

    • "因為星期幾 因為月名 日 年 時:分:秒 時區(qū)",如 "TueMay 25 2004 00:00:00 GMT-0770"谈火。

    • ISO 8601擴展格式YYYY-MM-DDTHH:mmSS.SSZ (例如:"2004-05-25T00:00:00")侈询。只有兼容ECMAScript 5的實現(xiàn)支持這種格式。

      在一次項目的擴展中糯耍,使用 YYYY-MM-DDTHH:mmSS.SSZ 這個格式在 Safari 上就出現(xiàn)無法解析的問題扔字,解決方式是把 '-' 轉(zhuǎn) 成 '/'。

    // 創(chuàng)建 2004年5月25日的一個日期對象
    var someDate = new Date(Date.parse("May 25,2004"));
    
    // 如果傳入Date.parse() 方法的字符串不能表示日期温技,那么它會返回NAN革为。實際上,如果直接將表示日期的字符創(chuàng)傳遞給Date構造函數(shù)舵鳞,也會在后臺調(diào)用 Date.parse():
    var someDate = new Date("May 25,2004"); // 這句代碼與上句代碼是等價的
    

    日期對象在不同瀏覽器中的實現(xiàn)有許多起卦的行為篷角。其中有一種傾向是將超出范圍的值替換成當前值,以便生成輸出系任。

    例如:在接續(xù) "January 32,2007"時恳蹲,有的瀏覽器會將其解釋為 "February 1,2007"。而Opera則傾向于插入當前月份的當前日期俩滥,返回 "January當前日期嘉蕾,2007"。

    也就是說霜旧,如果在2007年9月21日運行前面的代碼错忱,將會得到 "January 21,2007"(都是21日)儡率。

  • Date.UTC():

Date.UTC()方法同樣也返回表示日期的毫秒數(shù),但它與 Date.parse() 在構建值時使用不同的信息以清。

  • 參數(shù)一:年份儿普、基于0的月份(一月是0,二月是1掷倔,以此類推)
  • 參數(shù)二:月中的哪一天(1到31)
  • 參數(shù)三:小時數(shù)(0到23)
  • 參數(shù)四:分鐘
  • 參數(shù)五:秒
  • 參數(shù)六:毫秒數(shù)

在這些參數(shù)中只有前兩個參數(shù)(年和月)是必需的眉孩。

// 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));

// 本地時間2000年1月1日午夜零時
var y2k_1 = new Date(2000, 0);

// 本地時間2005年5月5日下午5:55:55
var allFives_1 = new Date(2005, 4, 5, 17, 55, 55);

ECMAScript 5 添加了 Date.now() 方法,返回表示調(diào)用這個方法時的日期和時間的毫秒數(shù)勒葱。這個方法簡化了使用Date對象分析代碼的工作浪汪。

// 取得開始時間
var start = Date.now();

// 調(diào)用函數(shù)
doSomething()

// 取得停止時間
var stop = Date.now(),
    result = stop - start;

獲取一個方法的執(zhí)行時間毫秒值

支持 Date.now() 方法的瀏覽器包括 IE9+、Firefox 3+凛虽、Safari 3+死遭、Opera 10.5和Chrome。

// 取得開始時間
var start = +new Date();

// 調(diào)用函數(shù)
doSomething()

// 取得停止時間
var stop = +new Date();
    result = stop - start;

在不支持 Date.now() 方法的瀏覽器中凯旋,使用 '+' 操作符把Data對象轉(zhuǎn)換成字符串呀潭,也可以得到毫秒值。

比較 Date 的大小

Date 類型的 ValueOf() 方法至非,不返回字符串钠署,而是返回日期的毫秒表示。因此睡蟋,可以方便使用比較操作符(大于或小于)來比較日期值踏幻。

var date1 = new Date(2007, 0, 1);
var date2 = new Date(2007, 1, 1);

alert(date1 < date2) // true
alert(date1 > date2) // false

日期格式化

Date 類型還有一些專門用于將日期格式化為字符串的方法:

  • toDateString():new Date().toDateString() // "Tue Oct 18 2016"
  • toTimeString():new Date().toTimeString() // "23:29:12 GMT+0800 (CST)"
  • toLocaleDateString():new Date().toLocaleDateString() // "2016/10/18"
  • toLocaleTimeString():new Date().toLocaleTimeString() // "下午11:30:28"
  • toUTCString():new Date().toUTCString() // "Tue, 18 Oct 2016 15:30:53 GMT"

日期/時間組件方法

方法 說明
getTime() 返回表示日期的毫秒數(shù):與valueOf()方法返回的值相同
setTime(毫秒) 以毫秒數(shù)設置日期枷颊,會改變整個日期
getFullYear() 獲取四位數(shù)的年豐(如 2007而非07)
getUTCFullYear() 返回UTC日期的4位數(shù)年份
setFullYear(年) 設置日起的年份戳杀,傳入的年分支必須是4為數(shù)字(如 2007而非07)
setUTCFullYear(年) 設置UTC日期的年份。傳入的年份值必須是4位數(shù)字(如 2007而非07)
getMonth() 返回日期中的月份夭苗,其中0表示一月信卡,11表示十二月
getUTCMonth() 返回UTC日期中的月份,其中0表示一月题造,11表示十二月
setMonth() 設置日期的月份傍菇。傳入的月份值必須大于0,超過11則增加年份
setUTCMonth() 設置UTC日期的月份界赔。傳入的月份值必須大于0丢习,超過11則增加年份
getDate() 返回日期月份中的天數(shù)(1到31)
getUTCDate() 返回UTC日期月份中的天數(shù)(1到31)
setDate() 設置日期月份中的天數(shù)。如果傳入的值超過了該月中應有的天數(shù)淮悼,則增加月份
setUTCDate(日) 設置UTC日期月份中的天數(shù)咐低。如果傳入的值超過了該月中應有的天數(shù),則增加月份
getDay() 返回日期中清氣得星期幾(其中0表示星期日袜腥,6表示星期六)
getUTCDay() 返回UTC日期中清氣得星期幾(其中0表示星期日见擦,6表示星期六)
getHours() 返回日期中的小時數(shù)(0到23)
getUTCHours() 返回UTC日期中的小時數(shù)(0到23)
setHours(時) 設置日期中的小時數(shù),傳入的超過了23則增加月份中的天數(shù)
setUTCHours(時) 設置UTC日期中的小時數(shù),傳入的超過了23則增加月份中的天數(shù)
getMinutes() 返回日期中的分鐘數(shù)(0到59)
getUTCMinutes() 返回UTC日期中的分鐘數(shù)(0到59)
settMinutes(分) 設置日期中的分鐘數(shù)鲤屡。傳入的值超過59則增加小時數(shù)
settUTCMinutes(分) 設置UTC日期中的分鐘數(shù)损痰。傳入的值超過59則增加小時數(shù)
getSeconds() 返回日期中的秒數(shù)(0到59)
getUTCSeconds() 返回UTC日期中的秒數(shù)(0到59)
setSeconds(秒) 設置日期中的秒數(shù),傳入的值超過59則增加分鐘數(shù)
setUTCSeconds(秒) 設置UTC日期中的秒數(shù)酒来,傳入的值超過59則增加分鐘數(shù)
getMillSeconds() 返回日期中的毫秒數(shù)
getUTCMillSeconds() 返回UTC日期中的毫秒數(shù)
settMillSeconds() 設置日期中的毫秒數(shù)
settUTCMillSeconds() 設置UTC日期中的毫秒數(shù)
getTimezoneOffset() 返回本地時間與UTC時間相差的分鐘數(shù)卢未。例如:美國東部標準時間返回300。在某地進入夏令時的情況下役首,這個值會有所變化
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尝丐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衡奥,更是在濱河造成了極大的恐慌爹袁,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矮固,死亡現(xiàn)場離奇詭異失息,居然都是意外死亡,警方通過查閱死者的電腦和手機档址,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門盹兢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人守伸,你說我怎么就攤上這事绎秒。” “怎么了尼摹?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵见芹,是天一觀的道長。 經(jīng)常有香客問我蠢涝,道長玄呛,這世上最難降的妖魔是什么和二? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任徘铝,我火速辦了婚禮,結果婚禮上惯吕,老公的妹妹穿的比我還像新娘惕它。我一直安慰自己,他們只是感情好废登,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布淹魄。 她就那樣靜靜地躺著,像睡著了一般钳宪。 火紅的嫁衣襯著肌膚如雪揭北。 梳的紋絲不亂的頭發(fā)上扳炬,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音搔体,去河邊找鬼恨樟。 笑死,一個胖子當著我的面吹牛疚俱,可吹牛的內(nèi)容都是我干的劝术。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼呆奕,長吁一口氣:“原來是場噩夢啊……” “哼养晋!你這毒婦竟也來了?” 一聲冷哼從身側響起梁钾,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绳泉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后姆泻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體零酪,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年拇勃,在試婚紗的時候發(fā)現(xiàn)自己被綠了四苇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡方咆,死狀恐怖月腋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瓣赂,我是刑警寧澤榆骚,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站钩述,受9級特大地震影響寨躁,放射性物質(zhì)發(fā)生泄漏穆碎。R本人自食惡果不足惜牙勘,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望所禀。 院中可真熱鬧方面,春花似錦、人聲如沸色徘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褂策。三九已至横腿,卻和暖如春颓屑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背耿焊。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工揪惦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罗侯。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓器腋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钩杰。 傳聞我的和親對象是個殘疾皇子纫塌,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容