[TOC]
## 5.3 Date类型
在JavaScript中,Date类型是用来保存日期的,它能精确到1970年1月1日之前或之后的100,000,000年。
### 5.3.1 创建日期对象
要创建一个日期对象,使用new操作符和Date构造函数即可:
~~~
var now = new Date();
~~~
在调用Date构造函数而不传递参数时,新创建的对象自动获得**当前日期和时间**。
如果要根据特定的日期和时间创建日期对象,必须传入表示**该日期的毫秒数**(即从UTC时间1970年1月1日起至该日期止经过的毫秒数)
注意:如果给Date构造函数传入的是其他格式,也会在后台调用Date.parse(),将其转换成毫秒数。
### 5.3.2 Date对象方法
**1. Date.parse()**
Date.parse()接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数。
将地区设置为美国的浏览器,通常可以接受下列日期格式:
~~~
“月/日/年”,如11/11/2016
“英文月名 日,年”,如 January 12,2016
“英文星期几 英文月名 日 年 时:分:秒 时区”,如Tue May 25 2016 00:00:00 GMT-0700
ISO 8601扩展格式 YYYY-MM-DDTHH:mm:ss:sssZ,如2016-11-11T00:00:00。兼容ECMAScript 5的浏览器支持这种格式。
var someDate = new Date(Date.parse('2016-11-11'));
~~~
如果传入Date.parse()方法的字符串不能表示日期,则会返回NaN。
**2.Date.UTC()**
Date.UTC()同样能返回表示日期的毫秒数。不过,它传入的参数有所不同,分别是年份、基于0的月份(一月是0,二月是1,以此类推)、月中的哪一天(1到31)、小时数(0到23)、分钟、秒数以及毫秒数,只有前两个参数是必须的。如果没有提供月中的天数,则假设天数为1。如省略其他参数,默认为0.
~~~
var y2k = new Date(Date.UTC(2017,0));
var someDate = new Date(Date.UTC(2017, 0, 1, 0, 0, 0));
~~~
如同模仿Date.parse()一样,Date构造函数也会模仿Date.UTC(),但日期和时间都基于本地时区而非GMT来创建。
~~~
var y2k = new Date(2017, 0)
var someDate = new Date(2017, 0, 1, 0, 0, 0);
~~~
**3.Date.now()**
Date.now()返回表示调用这个方法时的日期和时间的毫秒数。
~~~
var times = Date.now();
~~~
也可以使用+操作符实现Date.now()的功能:
~~~
var times2 = + new Date();
~~~
### 5.3.3 Date实例对象的方法
* valueOf():返回日期的毫秒表示。等于getTime()
* to类:从Date对象返回一个字符串,表示指定的时间。
| 方法 | 描述 |
| --- | --- |
| toString() | 返回一个完整的日期字符串。 |
| toLocaleString () | 按照与浏览器设置的时区相适应的格式返回日期字符串,包含AM或PM,但不包含时区。 |
| toDateString() | 返回格式为星期几、月、日和年的字符串。 |
| toTimeString() | 返回格式为时、分、秒和时区的字符串。 |
| toLocaleDateString() | 返回格式为星期几、月、日和年的字符串(依照时区的不同,显示的格式也会所有不同) |
| toLocaleTimeString() | 返回格式为时、分、秒和时区的字符串。依照时区的不同,显示的格式也会所有不同) |
| toUTCString() | 返回完整的UTC日期 |
* get类:获取Date对象的日期和时间
| 方法 | 描述 |
| --- | --- |
| getTime() | 返回距离1970年1月1日00:00:00的毫秒数,等同于valueOf方法。|
| getDay()| 返回星期几,星期日为0,星期一为1,以此类推。|
| getYear() | 返回距离1900的年数。|
| getFullYear() | 返回四位的年份。|
| getMonth()| 返回月份(0表示1月,11表示12月)。|
| getHours() |返回小时(0-23)。|
| getMilliseconds()| 返回毫秒(0-999)。|
| getMinutes() | 返回分钟(0-59)。|
| getSeconds() | 返回秒(0-59)。|
| getTimezoneOffset() | 返回当前时间与UTC的时区差异,以分钟表示,返回结果考虑到了夏令时因素。|
*上面这些get类方法返回的都是当前时区的时间,Date对象还提供了这些方法对应的UTC版本,用来返回UTC时间。*
~~~
getUTCDate()
getUTCFullYear()
getUTCMonth()
getUTCDay()
getUTCHours()
getUTCMinutes()
getUTCSeconds()
getUTCMilliseconds()
~~~
* set类:设置Date对象的日期和时间
| 方法 | 描述 |
| --- | --- |
| setDate(date) | 设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。|
| setYear(year) | 设置距离1900年的年数。|
| setFullYear(year [, month, date]) | 设置四位年份。|
| setHours(hour [, min, sec, ms]) | 设置小时(0-23)。|
| setMilliseconds() | 设置毫秒(0-999)。|
| setMinutes(min [, sec, ms]) | 设置分钟(0-59)。|
| setMonth(month [, date]) | 设置月份(0-11)。|
| setSeconds(sec [, ms]) | 设置秒(0-59)。|
| setTime(milliseconds) | 设置毫秒时间戳。|
注意:月份都是从0开始的。
set类方法也有对应的设置UTC时间的方法:
~~~
setUTCDate()
setUTCFullYear()
setUTCHours()
setUTCMilliseconds()
setUTCMinutes()
setUTCMonth()
setUTCSeconds()
~~~
- 前言
- 第一章 JavaScript简介
- 第三章 基本概念
- 3.1-3.3 语法、关键字和变量
- 3.4 数据类型
- 3.5-3.6 操作符、流控制语句(暂略)
- 3.7函数
- 第四章 变量的值、作用域与内存问题
- 第五章 引用类型
- 5.1 Object类型
- 5.2 Array类型
- 5.3 Date类型
- 5.4 基本包装类型
- 5.5 单体内置对象
- 第六章 面向对象的程序设计
- 6.1 理解对象
- 6.2 创建对象
- 6.3 继承
- 第七章 函数
- 7.1 函数概述
- 7.2 闭包
- 7.3 私有变量
- 第八章 BOM
- 8.1 window对象
- 8.2 location对象
- 8.3 navigator、screen与history对象
- 第九章 DOM
- 9.1 节点层次
- 9.2 DOM操作技术
- 9.3 DOM扩展
- 9.4 DOM2和DOM3
- 第十章 事件
- 10.1 事件流
- 10.2 事件处理程序
- 10.3 事件对象
- 10.4 事件类型
- 第十一章 JSON
- 11.1-11.2 语法与序列化选项
- 第十二章 正则表达式
- 12.1 创建正则表达式
- 12.2-12.3 模式匹配与RegExp对象
- 第十三章 Ajax
- 13.1 XMLHttpRequest对象
- 你不知道的JavaScript
- 一、作用域与闭包
- 1.1 作用域
- 1.2 词法作用域
- 1.3 函数作用域与块作用域
- 1.4 提升
- 1.5 作用域闭包
- 二、this与对象原型
- 2.1 关于this
- 2.2 全面解析this
- 2.3 对象
- 2.4 混合对象“类”
- 2.5 原型
- 2.6 行为委托
- 三、类型与语法
- 3.1 类型
- 3.2 值
- 3.3 原生函数