一、Date作為工具函數(shù)
Date對象是JS提供的日期和時間的操作接口。
Date對象作為工具函數(shù)直接使用,不管有沒有參數(shù),都是返回當(dāng)前時間的字符串。

二、new Date()
Date還可以當(dāng)作構(gòu)造函數(shù)使用,返回一個Date對象的實例,如果不加參數(shù),生成的就是代表當(dāng)前時間的對象。
var today = new Date();
這個Date實例對應(yīng)的字符串值,就是當(dāng)前時間。

同時作為構(gòu)造函數(shù),里面還可以接受多種形式的參數(shù)。
[ 注 ]:北京時間,又名中國標準時間(CST),是中國大陸的標準時間,比世界協(xié)調(diào)時快八小時(即UTC+8),或者是比格林威治時間快八小時(即GMT+8),因為格林威治時間(GMT)和世界協(xié)調(diào)時間(UTC)處于同個時區(qū)。
2.1、new Date(milliseconds)
將你要得到的那個日期轉(zhuǎn)化成毫秒數(shù),時間是從1970年1月1日00:00:00 UTC開始計算的。
// 將1970年1月2日的 零時 轉(zhuǎn)為時間對象
//注意,這里是零時,那東八區(qū)就會+8
var Jan02_1970 = new Date( 24* 60 * 60 * 1000);
// Fri Jan 02 1970 08:00:00 GMT+0800(中國標準時間)
// 將1969年12月31日的零時轉(zhuǎn)為時間對象
var Dec31_1969 = new Date(- 24 * 60 * 60 * 1000);
// Wed Dec 31 1969 08:00:00 GMT+0800(中國標準時間)

上面最后一個例子說明,Date構(gòu)造函數(shù)的參數(shù)可以是一個負數(shù),表示1970年1月1日之前的時間。
2.2、new Date(datestring)
Date對象還接受一個日期字符串作為參數(shù),返回所對應(yīng)的時間。
new Date('Jan 2, 2017');
// Mon Jan 02 2017 00:00:00 GMT+0800 (中國標準時間)
對于YYYY-MM-DD形式的字符串,JavaScript引擎可能會將其當(dāng)作ISO格式來解析,采用格林尼治時區(qū)作為計時標準;而對于其他格式的日期字符串,一律視為非ISO格式,采用本地時區(qū)作為計時標準。

2.3、new Date(year, month [, date, hours, minutes, seconds, ms])
Date對象還可以接受多個整數(shù)作為參數(shù),依次表示年、月、日、小時、分鐘、秒和毫秒。如果采用這種格式,最少需要提供兩個參數(shù)(年和月),其他參數(shù)都是可選的。
注意:月份從0開始計算,日期date默認為1,其它默認為0。

三、日期的運算
類型轉(zhuǎn)換時,Date對象的實例如果轉(zhuǎn)為數(shù)值,則等于對應(yīng)的毫秒數(shù);
如果轉(zhuǎn)為字符串,則等于對應(yīng)的日期字符串。

所以,兩個日期對象進行減法運算,返回的就是它們間隔的毫秒數(shù);進行加法運算,返回的就是連接后的兩個字符串。
四、Date對象的靜態(tài)方法
4.1、Date.now() [ 當(dāng)前時間是CST時間,會轉(zhuǎn)成GMT時間計算 ]
Date.now方法返回當(dāng)前時間的UTC時間距離1970年1月1日 00:00:00 UTC的毫秒數(shù)。

這個當(dāng)前是個什么時間?
假設(shè)我電腦現(xiàn)在顯示2017年1月2日 11:15:00 CST這是東八區(qū)時間,那要先轉(zhuǎn)化為UTC時間-8即2017年1月2日 03:15:00 UTC然后計算這個時間距離1970年1月1日 00:00:00 UTC的毫秒數(shù)。

4.2、Date.parse() [ 參數(shù)是CST或GMT,是CST則轉(zhuǎn)成GMT時間計算 ]
Date.parse方法用來解析日期字符串,返回距離1970年1月1日 00:00:00 UTC的毫秒數(shù)。

如果解析失敗,返回NaN。

4.3、Date.UTC() [ 參數(shù)是GMT無需轉(zhuǎn)換 ]
該方法接受年、月、日等變量作為參數(shù),參數(shù)就是UTC時間,返回距離1970年1月1日 00:00:00 UTC的毫秒數(shù)。

現(xiàn)在發(fā)現(xiàn)有點懵B,這些個方法,參數(shù),時區(qū),得到的結(jié)果讓人摸不著頭腦,甚是玄乎啊,不知道怎么記憶。

五、Date實例對象的方法
Date的實例對象,有幾十個自己的方法,分為以下三類。
- to類:從Date對象返回一個字符串,表示指定的時間。
- get類:獲取Date對象的日期和時間。
- set類:設(shè)置Date對象的日期和時間。
5.1、to類方法
toString:返回當(dāng)前時區(qū)的完整日期字符串;
toUTCString:返回返回對應(yīng)的UTC時間完整日期字符串;
toDateString:返回日期字符串;
toTimeString:返回時間字符串;
toLocaleTimeString:返回一個字符串,代表時間的當(dāng)?shù)貙懛ā?/p>

5.2、get類方法
Date對象提供了一系列get*方法,用來獲取實例對象某個方面的值。
getFullYear: 獲取實例的四位年份;
getMonth:獲取月份(0表1月,11表12月);
getDate:獲取幾號;
getDay:獲取星期(0為星期日,1為星期一);
getHours:返回小時;
getMinutes:返回分鐘;
getSeconds:返回秒;
getMilliseconds:返回毫秒;
getTime():返回距離1970年1月1日00:00:00的毫秒數(shù),相當(dāng)于valueOf();

5.3、set類方法
Date對象提供了一系列set*方法,用來設(shè)置實例對象的各個方面。
setFullYear:設(shè)置實例的四位年份;
setMonth:設(shè)置月份;
setDate:設(shè)置日子;
setHours:設(shè)置小時;
setMinutes:設(shè)置分鐘;
setSeconds:設(shè)置秒;
setMilliseconds:設(shè)置毫秒;
setTime:設(shè)置毫秒時間戳;

(本系列下一節(jié)為 — Math對象)