JavaScript引用类型——“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 2015document.write(date.toTimeString()); //11:32:25 GMT+0800 (CST)document.write(date.toLocaleDateString()); //2015年11月16日document.write(date.toLocaleTimeString()); //GMT+8上午11:33:16document.write(date.toUTCString()); //Mon, 16 Nov 2015 03:33:37 GMTdocument.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秒