Date 類型使用自 UTC(Coordinated Universal Time,國際協(xié)調(diào)時間)1970 年 1 月 1 日午夜(零時)開始經(jīng)過的毫秒數(shù)來保存日期。
1. 創(chuàng)建Date對象,使用 new 操作符和 Date 構(gòu)造函數(shù)即可:
(1)Date 對象自動使用當(dāng)前的日期和時間作為其初始值
var date = new Date();
(2)將給定的毫秒數(shù)轉(zhuǎn)換為使用的時間,new Date(dateVal)
dateVal必選項。- 如果是數(shù)字值,
dateVal表示指定日期與1970年1月1日午夜間全球標(biāo)準(zhǔn)時間的毫秒數(shù)。- 如果是字符串,則
dateVal按照parse方法中的規(guī)則進行解析。
var date = new Date("2018/04/06 03:23:55");
var date = new Date(1545548361287);
(3)指定具體的日期,new Date((year,month,date[,hours[,minutes[,seconds[,ms]]]]))
year必選項,完整的年份,比如,1976(而不是76)month必選項,表示的月份,是從0到11之間的整數(shù)(1月至12月)date必選項,表示日期,是從1到31之間的整數(shù)hours可選項,如果提供了minutes則必須給出。表示小時,是從0到23的整數(shù)minutes可選項,如果提供了seconds則必須給出。表示分鐘,是從0到59的整數(shù)seconds可選項,如果提供了milliseconds則必須給出。表示秒鐘,是從0到59的整數(shù)ms可選項,表示毫秒,是從0到999的整數(shù)
var date = new Date(2018, 11, 23, 15, 3, 23);
2. 日期的運算
類型自動轉(zhuǎn)換時,Date實例如果轉(zhuǎn)為數(shù)值,則等于對應(yīng)的毫秒數(shù);如果轉(zhuǎn)為字符串,則等于對應(yīng)的日期字符串。
- 兩個日期實例對象進行減法運算時,返回的是它們間隔的毫秒數(shù);
- 進行加法運算時,返回的是兩個字符串連接而成的新字符串。
var d1 = new Date(2018, 0, 1);
var d2 = new Date(2018, 11, 1);
console.log(d2 - d1); //28857600000
console.log(d2 + d1);
// "Sat Dec 01 2018 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)Mon Jan 01 2018 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)"
3. 靜態(tài)方法:Date.now()
Date.now()方法返回當(dāng)前時間距離時間零點(1970年1月1日 00:00:00 UTC)的毫秒數(shù),相當(dāng)于 Unix 時間戳乘以1000。
Date.now(); // 1545549988630
4. 繼承的方法
(1)valueOf()方法返回實例對象距離時間零點(1970年1月1日00:00:00 UTC)對應(yīng)的毫秒數(shù),該方法等同于getTime方法。
var d = new Date();
d.valueOf() // 1545550458280
d.getTime() // 1545550458280
(2)toString()方法返回一個完整的日期字符串。因為toString是默認(rèn)的調(diào)用方法,所以如果直接讀取Date實例,就相當(dāng)于調(diào)用這個方法。
var d = new Date(2018, 11, 23);
console.log(d.toString()); // Sun Dec 23 2018 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)
console.log(d); // Sun Dec 23 2018 00:00:00 GMT+0800 (中國標(biāo)準(zhǔn)時間)
(3)toLocaleString()返回一個表示該日期對象的字符串,該字符串與系統(tǒng)設(shè)置的地區(qū)關(guān)聯(lián)。
var d = new Date(2018, 11, 23);
console.log(d.toLocaleString()); // 2018/12/23 上午12:00:00
5. get 類方法
Date對象提供了一系列get*方法,用來獲取實例對象某個方面的值。
| 實例的方法名 | 作用 |
|---|---|
| getTime() | 返回實例距離1970年1月1日00:00:00的毫秒數(shù),等同于valueOf方法 |
| getYear() | 返回距離1900的年數(shù) |
| getFullYear() | 返回四位的年份 |
| getMonth() | 返回月份(0 ~ 11,0表示1月,11表示12月) |
| getDay() | 返回星期幾,星期日為0,星期一為1,以此類推 |
| getDate() | 返回實例對象對應(yīng)每個月的幾號(從1開始) |
| getHours() | 返回小時數(shù) (0 ~ 23) |
| getMinutes() | 返回分鐘數(shù) (0 ~ 59) |
| getSeconds() | 返回秒數(shù) (0 ~ 59) |
| getMilliseconds() | 返回毫秒數(shù) (0 ~ 999) |
6. set 類方法
Date對象提供了一系列set*方法,用來設(shè)置實例對象的各個方面。
| 實例的方法名 | 作用 |
|---|---|
| setTime(milliseconds) | 設(shè)置毫秒時間戳 |
| setYear(year) | 設(shè)置距離1900年的年數(shù) |
| setFullYear(year [, month, date]) | 設(shè)置四位年份 |
| setMonth(month [, date]) | 設(shè)置月份(0-11) |
| setDate(date) | 設(shè)置實例對象對應(yīng)的每個月的幾號(1-31),返回改變后毫秒時間戳 |
| setHours(hour [, min, sec, ms]) | 設(shè)置小時(0-23) |
| setMinutes(min [, sec, ms]) | 設(shè)置分鐘(0-59) |
| setSeconds(sec [, ms]) | 設(shè)置秒(0-59) |
| setMilliseconds() | 設(shè)置毫秒(0-999) |
這些方法基本是跟get*方法一一對應(yīng)的,但是沒有setDay方法,因為星期幾是計算出來的,而不是設(shè)置的。
7. 將日期轉(zhuǎn)換為指定的格式
// 可以為Date原型添加如下的方法
Date.prototype.format = function(fmt) {
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours(), //小時
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3), //季度
"S" : this.getMilliseconds() //毫秒
};
if(/(y+)/.test(fmt)) {
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o) {
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}
// 調(diào)用
var time = new Date().format("yyyy-MM-dd hh:mm:ss");
console.log(time);