[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 原生函數