ECMAScript中的Date类型是在早期Java中的java.util.Date类的基础上构建的.因此,Date类型使用自UTC(Coordinated Universal Time)1970年1月1日零时开始经过的毫秒数来保存日期.
要创建一个日期对象,使用new操作符和Date构造函数即可.
var now=new Date(); console.log(now);//输出类似Fri Nov 20 2015 13:44:07 GMT+0800(中国标准时间)
在调用Date构造函数而不传参的情况下,新创建的对象自动获得当前日期和时间.
如果想根据特定日期和时间创建日期对象,必须传入表示该日期的毫秒数(从1970年1月1日零时至该日期经过的毫秒数).
为了简化这个过程,提供了两个方法:Date.parse()和Date.UTC().
没有定义Date.parse()应该支持哪种日期格式,这个方法的行为因实现而异,因地区而异.
将地区设置为美国的浏览器通常都接受下列日期格式:
"月/日/年",如6/13/2015;
"英文月名 日,年",如January 12,2015;
“英文星期几 英文月名 日 年 时:分:秒 时区”,如Tue May 25 2015 00:00:00 GMT-0700.
例如,要为2015年5月25日创建一个日期对象,可以使用下面代码:
var someDate=new Date(Date.parse("May 25,2015")); console.log(someDate);//Mon May 25 2015 00:00:00 GMT+0800 (中国标准时间)
日期对象及其在不同浏览器中的实现有许多奇怪的行为.例如有一种是将超出范围的值替换成当前的值,以便于生成输出.
var someDate1=new Date(Date.parse("May 32,2015")); alert(someDate1);//IE和FF会弹出Mon Jun 01 2015 00:00:00 GMT+0800,而Chrome,Opera,Safari会弹出Invalid Date
Date.UTC()方法同样也返回表示日期的毫秒数,但它与Date.parse()在构建值时使用不同的信息.
Date.UTC()的参数分别是年份,基于0的月份(一月是0,二月是1,以此类推),月中那一天(1到31天),小时数(0到23),分钟,秒以及毫秒数.
在这些参数里,只能前两个参数(年和月)是必需的.如果没有提供月中的天数,则假设天数为1,如果省略其他参数,则统统假设为0.
var y2k=new Date(Date.UTC(2000,0));//传入的值一个表示年,一个表示月份 console.log(y2k);//Sat Jan 01 2000 08:00:00 GMT+0800 (中国标准时间) var allFives=new Date(Date.UTC(2015,4,5,17,55,55));//五月为4,小时下午5点写为17 console.log(allFives);//Wed May 06 2015 01:55:55 GMT+0800 (中国标准时间)
如同模仿Date.parse()一样,Date构造函数也会模仿Date.UTC(),但有一点明显不同:日期和时间都基于本地区而非GMT来创建.不过,Date构造函数接收的参数仍然与Date.UTC()相同.
因此,如果第一个参数是数值,Date()构造函数应付假设该值是日期中的年份,而第二个参数是月份,以此类推.
因此前面两个例子也可以如下写:
var y2k=new Date(2000,0); console.log(y2k);//Sat Jan 01 2000 00:00:00 GMT+0800 (中国标准时间) var allFives=new Date(2015,4,5,17,55,55); console.log(allFives);//Tue May 05 2015 17:55:55 GMT+0800 (中国标准时间)
以上代码创建了与前面例子相同的两个日期对象,只不过这次的日期都是基于系统设置的本地时区创建的.
ECMAScript 5添加了Date.now()就去,返回表示调用这个方法时的日期和时间的毫秒数.
这个方法简化了使用Date对象分析代码的工作.
例如:
//取得开始时间 var start=Date.now(); //调用函数 doSomething(); //取得停止时间 var stop=Date.now(); result=stop-start;
在不支持Date.now()的浏览器中,使用+操作符把Date对象转换成字符串,也可以达到同样的目的.
//取得开始时间 var start=+Date.now(); //调用函数 doSomething(); //取得停止时间 var stop=+Date.now(); result=stop-start;
5.3.1继承的方法
与其他引用类型一样,Date类型也重写了toLocaleString(),toString()和valueOf()方法,但这些方法返回值与其他类型的中的方法不同.
Date类型的toLocaleString()方法会按照与浏览器设置的地区相适应的格式返回日期和时间.
而toString()方法则通常返回带有时区信息的日期和时间,其中时间一般以军用时间(即小时的范围是0到23)表示.
toLocaleString()和toString()两种方法在不再的浏览器返回的日期和时间格式大不相同,事实上,它们的差别也仅在调试代码时比较有用,而在显示日期和时间时没有什么价值.
至于Date类型的valueOf()方法,则根本不返回字符串,而是返回日期的毫秒表示.因此,可以方便使用比较操作符来比较日期值.
var date1=new Date(2015,0,1); var date2=new Date(2015,1,1); console.log(date1<date2);//true console.log(date1>date2);//false
从逻辑上讲,2015年1月1日要早于2015年2月1日,此时如果我们说前者小于后者比较符合常理.但是表示2015年1月1日的毫秒数小于表示2015年2月1日的毫秒值,因此在比较两者大小时,第一个返回true,第二个返回false.
这样就为我们比较日期提供了极大方便.
5.3.2日期格式化方法
Date类型还有一些专门用于将日期格式化为字符串的方法,这些方法如下
toDateString() 以特定于实现的格式显示星期几,月,日和年;
toTimeString() 以特定于实现的格式显示时,分,秒和时区;
toLocalDateString() 以特定于地区的格式显示星期几,月,日和年;
toLocalTimeString() 以特定于实现的格式显示时,分,秒;
toUTCString() 以特定于实现的格式完整的UTC日期.
与toLocaleString()和toString()方法一样,以上这些字符串格式方法的输出也是因浏览器而异的,因此没有哪一个方法能够用来在用户界面中显示一致的日期信息.
5.3.3 日期/时间组件方法
其他的Date类别的方法(如下表所示),都是直接取得和设置日期值中的特定的部分的方法.
需要注意的是,UTC日期指的是在没有时区偏差的情况下(将日期转换为GMT时间)的日期值.
方法 | 说明 |
getTime() | 返回表示日期的毫秒数;与valueOf()方法返回的值相同 |
setTime(毫秒) | 以毫秒数设置日期,会改变整个日期 |
getFullYear() | 取得4位数的年份 |
getUTCFullYear() | 返回UTC日期的4位数年份 |
setFullYear(年) | 设置日期的年份.传入的年份值必须是4位数字 |
setUTCFullYear(年) | 设置UTC日期的年份.传入的年份值必须是4位数字 |
getMonth() | 返回日期中的月份,其中0表示1月,11表示十二月 |
getUTCMonth() | 返回UTC日期中的月份,其中0表示1月,11表示十二月 |
setMonth(月) | 设置日期中的月份,传入的值必须大于0,超过11则增加年份 |
setUTCMonth(月) | 设置UTC日期中的月份,传入的值必须大于0,超过11则增加年份 |
getDate() | 返回日期月份中的天数(1~31) |
getUTCDate() | 返回UTC日期月份中的天数(1~31) |
setDate(日) | 设置日期月份中的天数.如果传入的值超过了该月中就应有的天数,则增加月份 |
setUTCDate(日) | 设置UTC日期月份中的天数.如果传入的值超过了该月中就应有的天数,则增加月份 |
getDay() | 返回日期中星期的星期几(其中0表示星期在日,6表示星期六) |
getUTCDay() | 返回UTC日期中星期的星期几(其中0表示星期在日,6表示星期六) |
getHours() | 返回日期中的小时数(0到23) |
getUTCHours() | 返回UTC日期中的小时数(0到23) |
setHours(时) | 设置日期中的小时数.传入值超过了23则增加月份中的天数 |
setUTCHours(时) | 设置UTC日期中的小时数.传入值超过了23则增加月份中的天数 |
getMinutes() | 返回日期中的分钟数(0到59) |
getUTCMinutes() | 返回UTC日期中的分钟数(0到59) |
setMinutes(分) | 设置日期中的分钟数.传入的值超过59则增加小时数 |
setUTCMinutes(分) | 设置UTC日期中的分钟数.传入的值超过59则增加小时数 |
getSeconds() | 返回日期中的秒数(0到59) |
getUTCSeconds() | 返回UTC日期中的秒数(0到59) |
setSeconds(秒) | 设置日期中的秒数(0到59) |
setUTCSeconds(秒) | 设置UTC日期中的秒数(0到59) |
getMilliseconds() | 返回日期中的毫秒数 |
getUTCMilliseconds() | 返回UTC日期中的毫秒数 |
setMilliseconds(毫秒) | 设置日期中的毫秒数 |
setUTCMilliseconds(毫秒) | 设置UTC日期中的毫秒数 |
getTimezoneOffset() | 返回本地时间与UTC时间相差的分钟数.例如,美国东部标准时间返回300.在某地进入夏令时的情况下,这个值会有所变化 |
原文:http://www.cnblogs.com/sunshinegirl-7/p/4981079.html