天天看點

JavaScript引用類型——“Date類型”的注意要點Date 類型

Date 類型

ECMAScript 中的Date 類型使用自UTC(Coordinated Universal Time,國際協調時間)1970 年1 月1 日午夜(零時)開始經過的毫秒數來儲存日期。Date 類型儲存的日期能夠精确到1970 年1 月1 日之前或之後的185616年。

基本的三個方法

Date.parse()

Date.UTC()

Date.now()

三個方法。

首先,

Date.parse()

方法接收一個表示日期的字元串參數,然後嘗試根據這個字元串傳回相應日期的毫秒數。通常将地區設定為美國的浏覽器都接受下列日期格式:

  • “月/日/年”,如6/13/2004;
  • “英文月名 日,年”,如January 12,2004;
  • “英文星期 英文月名 日 年 時:分:秒 時區”,如Tue May 25 2004 00:00:00 GMT-0700。
  • ISO 8601 擴充格式 YYYY-MM-DDTHH:mm:ss.sssZ,如2004-05-25T00:00:00。隻有相容ECMAScript 5 的實作支援這種格式。

例如,要為2004年5月25日建立一個日期對象,可以使用下面的代碼:

var date = new Date(Date.parse("May 25 2004"));
console.log(date); //Tue May 25 2004 00:00:00 GMT+0800 (HKT)
           

也可以省略

Date.parse()

如:

var date = new Date("May 25 2004");
console.log(date); //Tue May 25 2004 00:00:00 GMT+0800 (HKT)

var date = new Date("11/16/2015");
console.log(date); //Mon Nov 16 2015 00:00:00 GMT+0800 (HKT)

var date = new Date("November 16, 2015");
console.log(date); //Mon Nov 16 2015 00:00:00 GMT+0800 (HKT)
           

其次,

Date.UTC()

方法同樣也傳回表示日期的毫秒數,該方法的參數分别是年份、基于0的月份、月中的哪一天、24小時制的小時數、分鐘、秒以及毫秒數。如果沒有提供月中的天數,則預設為1;如果省略其他參數,預設為0.如:

var date = new Date(Date.UTC(2015, 10, 16));
document.write(date); //Mon Nov 16 2015 08:00:00 GMT+0800 (CST)
           

也可以縮寫成:

var date = new Date(2015, 10, 16, 10,10,10);
console.log(date);//Mon Nov 16 2015 10:10:10 GMT+0800 (CST)
           

最後,

Date.now()

方法,傳回表示調用這個方法時的日期和時間的毫秒數。如:

var date = new Date(Date.now());
console.log(date); //Mon Nov 16 2015 10:48:02 GMT+0800 (CST)
           

可以用這個方法來跟蹤代碼的工作,如:

var start = new Date(Date.now());
for (var i = 0; i < 100; i++){
    for (var j = 0; j < 100; j++){
        document.write("result is: " + (i + j) + "<br/>");
    }
}
var stop = new Date(Date.now());
document.write("<br/>");
document.write((stop - start) + "<br/>" + start + "<br/>" + stop);
           

繼承的方法

Date 類型重寫了

toLocaleString()

toString()

valueOf()

方法。

toLocaleString()

方法會按照與浏覽器設定的地區相适應的格式傳回日期和時間。

toString()

方法則通常傳回帶有時區資訊的日期和時間。(

toLocaleString()

toString()

的輸出因浏覽器不同而有所差異)如:

var date = new Date(Date.now());
document.write(date.toLocaleString()); 
document.write(date.toString()); 
document.write(date.valueOf());
//2015年11月16日 GMT+8上午11:10:09
//Mon Nov 16 2015 11:10:09 GMT+0800 (CST)
//1447643409908
           

valueOf()

方法可用比較操作符來比較日期值。

var start = new Date(Date.parse("May 24,2015"));
var stop = new Date(Date.parse("Nov 16,2015"));
document.write(stop.valueOf() > start.valueOf()); //true
           

日期格式化方法

Date 類型還有一些專門用于将日期格式化為字元串的方法,這些方法如下:

  • toDateString()

    (星期、月、日和年)
  • toTimeString()

    (時、分、秒和時區)
  • toLocaleDateString()

    (星期、月、日和年)
  • toLocaleTimeString()

    (時、分、秒)
  • toUTCString()

    (UTC日期)
  • toGMTString()

    (不推薦)

舉個例子:

var date = new Date(Date.now());
document.write(date.toDateString()); //Mon Nov 16 2015
document.write(date.toTimeString()); //11:32:25 GMT+0800 (CST)
document.write(date.toLocaleDateString()); //2015年11月16日
document.write(date.toLocaleTimeString()); //GMT+8上午11:33:16
document.write(date.toUTCString()); //Mon, 16 Nov 2015 03:33:37 GMT
document.write(date.toGMTString()); //Mon, 16 Nov 2015 03:33:52 GMT
           

日期和時間元件方法

下面的方法都是直接取得和設定日期值中特定部分的方法。另外,UTC 日期指得是在沒有時區偏差的情況下(将日期轉換為GMT 時間)的日期值。

完整資料見w3school-Date對象方法

在舉個例子好了,以秒為間隔更新顯示目前時間:

var newP = document.createElement("p");
    var newP_text = document.createTextNode("");
    document.body.appendChild(newP);
    newP.appendChild(newP_text);
    setInterval(function(){
    var time = new Date(Date.now());
    var hours = time.getHours();
    var minutes = time.getMinutes();
    var seconds = time.getSeconds();
    if (seconds < 10){
        seconds = "0" + seconds;
    }
    if (hours < 10){
        hours = "0" + hours;
    }
    if (minutes < 10){
        minutes = "0" + minutes;
    }
    var current = "現在時間是:" + hours + "時" + minutes + "分" + seconds + "秒";
    newP.firstChild.nodeValue = current;
    }, 1000)
    
    //現在時間是:12時06分53秒
           

繼續閱讀