Date类型
Date类型使用自UTC(Coordinated Universal Time,国际协调时间) 1970年1月1日午夜(零食)开始经过的毫秒数来保存日期。在使用这种数据存储格式的条件下,Date类型保存的日期能够精确到1970年1月1日之前或之后的100000000年。
要创建一个日期对象,使用new操作符和Date构造函数即可。如:
var now = new Date();
在调用Date()构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。如果想根据特定的日期和时间创建日期对象,必须传入表示该日期的毫秒数(即从UTC时间1980年1月1日午夜起至改日期经过的毫秒数)。为了简化这一计算过程,ECMAScript提供了两个方法:Date.parse()和Date.UTC()。
- Date.parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数。ECMA-262没有定义Date.parse()应该支持哪种日期格式,因此这个方法的行为因实现而异,而且通常是因地区而异。如:
- "月/日/年",如6/14/2014;
- "英文月名 日,年",如January 12,2013;
- "英文星期几 英文月名 日 年 时:分:秒 时区",如 Tue May 25 2012 00:00:00 GMT-0700。
- ISO 8601 扩展格式 YYYY-MM-DDTHH:mm:ss.sssZ(例如 2012-03-12T00:00:00)只有兼容ECMAScript5的实现支持这种格式。
例如,为2004年5月24日创建一个日期对象,可以使用下面的代码:
var someDate = new Date(Date.parse("May 25, 2004"));
如果传入Date.parse()方法的字符串不能表示日期,它会返回NaN。实际上,直接将表示日期的字符串传递给Date构造函数,也会在后台调用Date.parse()。
var someDate = new Date("May 25, 2004");
- Date.UTC()方法也同样返回表示时期的毫秒数,但它与Date.parse()在构建值时使用不同的信息。Date.UTC()的参数分别是年份、基于0的月份(一月是0,二月是1,以此类推)、月中的哪一天(1到31),小时数(0到23)、分钟、秒以及毫秒数。在这些参数中,只有前两个参数(年和月)是必须的。如果没有提供月中的天数,则假设天数为1;如果省略其它参数,则统统假设为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构造函数也会模仿Date.UTC(),但有一点明显不同:日期和时间都是基于本地时间而非GMT来创建。不过,Date构造函数接收的参数仍然与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()方法,表示调用这个方法时的日期和时间的毫秒数。
//取得开始时间
var start = Date.now();
//调用函数
doSomething();
//取得停止时间
var stop = new Date(),
result = stop - start;
在不支持Date.now()方法的浏览器,使用+操作符获取Date对象的时间戳,也可以达到同样的目的。
//取得开始时间
var start = Date.now();
//调用函数
doSomething();
//取得停止时间
var stop = +new Date(),
result = stop - start;
-
1. 继承的方法
与其他引用类型一样,Date类型也重写了toLocalString()、toString()和valueOf()方法。但这些方法的返回值与其他方法中的不同。
Date类型的toLocalString()方法会按照于浏览器设置的地区相适应的格式返回日期和时间。toString()方法通常放回带有时区信息的日期和时间。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()——以特定与实现的格式显示星期几、月、日和年
toTimeString()——以特定与实现的格式显示时、分、秒和时区
toLocaleDateString()——以特定与地区的格式显示星期几、月、日和年
toLocaleTimeString()———以特定与实现的格式显示时、分、秒
toUTCString()——以特定与实现的格式完整的UTC日期
3. 日期/时间组件方法
直接取得和设置日期值中特定部分的方法。UTC日期值得是在没有时区偏差的情况下(将日期转换为GMT时间)的日期值。
- getTime():返回表示日期的毫秒数;与valueOf方法返回的值相同
- setTime(毫米):以毫秒数设置日期,会改变整个日期
- getFullYear():取得4位数的年份(如2007而非07)
- getUTCfFullYear():返回UTC日期的4位数年份
- setFullYear(年):设置日期的年份。传入的年分值必需是4位数字(如2007而非07)
-setUTCFullYear(年):设置UTC日期的年份。传入的年分值必需是4位数字(如2007而非07) - getMonth():放回日期中的月份,0表示一月,11表示十二月
- getUTCMonth():回UTC日期中的月份,0表示一月,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(秒):设置日期中的秒数。传入的值超过59增加分钟数
- setUTCSeconds(秒):设置UTC日期中的秒数。传入的值超过59增加分钟数
- getMilliseconds() : 返回日期的毫秒数
- getUTCMilliseconde():返回UTC日期的毫秒数
- setMilliseconds(秒):设置日期的毫秒数
- setUTCMilliseconds(秒):设置UTC日期的毫秒数
- getTimezoneOffset():返回本地时间与UTC时间相差的分钟数。