Date类型
一、相关概念
1.创建日期对象
Date
类型是在早起Java
中的java.util.Date
类基础上构建的。因此,Date
类型使用自UTC
(国际协调时间)1970年1月1日午夜(零时)开始经过的毫秒数来保存日期- 这种数据存储格式,
Date
类型保存的日期能精确到1970年1月1日之前或之后的100000000年 - 创建一个日期对象,使用
new
操作符和Date
构造函数
var now=new Date();
//在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间
//如果想根据特定的日期和时间创建日期对象(即从UTC时间1970年1月1日午夜起止该日期止经过的毫秒数)
//为简化这一计算过程,有两个方法Date.parse()和Date.UTC()
2.Date.parse()
- 接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数
- ECMA-262没有定义
Date.parse()
应该支持那种日期格式,这个方法因实现而异,因地区而异 - 如果传入
Date.parse()
方法的字符串不能表示日期,则会返回NaN
- 如果直接将表示日期的字符串传递给
Date
构造函数,也会在后台调用Date.parse()
var someDate=new Date(Date.parse("May 25,2004"));
var someDate=new Date("May 25,2004");//与前面的例子等价
3.Date.UTC()
Date.UTC()
方法同样也返回表示日期的毫秒数,但它与Date.parse()在构建值时使用不同的信息Date.UTC()
的参数分别是年份、基于0的月份(0到11)、月份中的哪一天(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()相同
//如果第一个参数是数值,Date构造函数就会假设该值是日期中的年份,而第二个参数是月份,一次类推
//本地时间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);
4.Date.now()
- 返回表示调用这个方法时的日期和时间的毫秒数
- 在不支持它的浏览器中,使用
+
操作符获取Date
对象的时间戳,也可以达到同样的目的
//取得开始时间
var start=Date.now();
//调用函数
doSomething();
//取得停止时间
var stop=Date.now();
result=stop-start;
var start=+new Date();
doSomething();
var stop=+new Date();
result=stop-start;
5.日期格式
- 将地区设置为美国的浏览器通常接收下列日期格式
- 方式
- "月/日/年",如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的实现支持各种格式
二、继承的方法
1.相关概念
- 与其他引用类型一样,
Date
类型也重新写了toLocaleString()
、toString()
和valueOf()
,但这些方法返回的值与其他类型的方法不同 Date
类型的toLocaleString()
方法会按照与浏览器设置的地区相应的格式返回日期和时间。这意味着时间格式会包含AM或PM,但不会包含时区信息(具体的格式会因浏览器而异)toString()
则通常返回带有时区信息的日期和时间,其中一般以军用时间(0到23)表示
####2.不同浏览器,输出PST(太平洋标准时间)的结果- Internet Explorer8
toLocaleString()
——Thursday,February 01,2007 12:00:00 AMtoString()
——Thu Feb 1:00:00:00 PST 2007
- Firefox 3.5
toLocaleString()
——Thursday,February 01,2007 12:00:00 AMtoString()
——Thu Feb 01 2007 00:00:00 GMT-0800 (Pacific Standard Time)
- Safari 4
toLocaleString()
——Thursday,February 01,2007 00:00:00toString()
——Thu Feb 01 2007 00:00:00 GMT-0800 (Pacific Standard Time)
- Chrome 4
toLocaleString()
——Thu Feb 01 2007 00:00:00 GMT-0800 (Pacific Standard Time)toString()
——Thu Feb 01 2007 00:00:00 GMT-0800 (Pacific Standard Time)
- Opera 10
toLocaleString()
——2/1/2007 12:00:00 AMtoString()
——Thu,01 Feb 2007 00:00:00 GMT-0800
####3.Date类型的valueOf()
Date
类型的valueOf()
,不返回字符串,而是返回日期的毫秒表示。因此,可以方便使用比较操作符(小于或大于)来比较日期值
var date1=new Date(2007,0,1);//"January 1,2007"
var date2=new Date(2007,1,1);//"February 1,2007"
alert(date1<date2);//true
alert(date1>date2);//false
三、日期格式化方法
1.将日期转化为字符串的方法####
toDateString()
——以特定于实现的格式显示星期几、月、日和年toTimeString()
——以特定于实现的格式显示时、分、秒和时区toLocaleDateString()
——以特定于地区的格式显示星期几、月、日和年toLocaleTimeString()
——以特定于实现的格式显示时、分、秒toUTCString()
——以特定与实现的格式完整的UTC日期- 补充
- 与
toLocaleString()
和toString()
方法一样,以上这些字符串格式方法的输出也因浏览器而异 - 还有一个
toUTCString()
,其存在目的在于确保向后兼容
- 与
四、日期/时间组件方法
- 剩下为介绍的
Date
类型的方法(下表),都是直接取得和设置日期值中特定部分的方法了 UTC
日期指的是在没有时区偏差的情况下(将日期转换为GMT
时间)的日期值
方法 | 说明 |
---|---|
getTime() | 返回表示日期的毫秒数;与valueOf()方法返回的值相同 |
setTime(毫秒) | 以毫秒数设置日期,会改变整个日期 |
getFullYear() | 取得4位数的年份(如2007而非仅07) |
getUTCFullYear() | 返回UTC日期的4位数年份 |
setFullYear(年) | 设置日期的年份。传入的年份值必须是4位数字(如2007而非仅07) |
setUTCFullYear(年) | 设置UTC日期的年份。传入的年份值必须是4位数字(如2007而非仅07) |
getMonth() | 返回日期中的月份,其中0表示一月,11表示12月 |
getUTCMonth() | 返回UTC日期中的月份,其中0表示一月,11表示12月 |
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() | 返回日期中的毫秒数 |
getUTCMilliseconds() | 返回UTC日期中的毫秒数 |
setMilliseconds(毫秒) | 设置日期中的毫秒数 |
setUTCMilliseconds(毫秒) | 设置UTC日期中的毫秒数 |
getTimezoneOffset() | 返回本地时间与UTC时间相差的分钟数。例如,美国东部标准时间返回300。在某地进入夏令时的情况下,这个值才会有所变化 |
源于整理《JavaScript高级程序设计》