Date 對象
在 JavaScript 中, Date 對象用於處理日期和時間。
它提供了獲取、設置日期時間等相關操作。
創建一個 Date 對象的方法:
- var date = new Date()
Date 對象與其實例的屬性和方法:
// Object.getOwnPropertyDescriptors(Date): name : {value: "Date", writable: false, enumerable: false, configurable: true} length : {value: 7, writable: false, enumerable: false, configurable: true} prototype : {value: {…}, writable: false, enumerable: false, configurable: false} UTC : {writable: true, enumerable: false, configurable: true, value: ƒ} now : {writable: true, enumerable: false, configurable: true, value: ƒ} parse : {writable: true, enumerable: false, configurable: true, value: ƒ} // Object.getOwnPropertyDescriptors(Date.prototype): constructor : {writable: true, enumerable: false, configurable: true, value: ƒ} toString : {writable: true, enumerable: false, configurable: true, value: ƒ} toLocaleString : {writable: true, enumerable: false, configurable: true, value: ƒ} valueOf : {writable: true, enumerable: false, configurable: true, value: ƒ} Symbol(Symbol.toPrimitive) : {writable: false, enumerable: false, configurable: true, value: ƒ} getDate : {writable: true, enumerable: false, configurable: true, value: ƒ} getDay : {writable: true, enumerable: false, configurable: true, value: ƒ} getFullYear : {writable: true, enumerable: false, configurable: true, value: ƒ} getHours : {writable: true, enumerable: false, configurable: true, value: ƒ} getMilliseconds : {writable: true, enumerable: false, configurable: true, value: ƒ} getMinutes : {writable: true, enumerable: false, configurable: true, value: ƒ} getMonth : {writable: true, enumerable: false, configurable: true, value: ƒ} getSeconds : {writable: true, enumerable: false, configurable: true, value: ƒ} getTime : {writable: true, enumerable: false, configurable: true, value: ƒ} getTimezoneOffset : {writable: true, enumerable: false, configurable: true, value: ƒ} getUTCDate : {writable: true, enumerable: false, configurable: true, value: ƒ} getUTCDay : {writable: true, enumerable: false, configurable: true, value: ƒ} getUTCFullYear : {writable: true, enumerable: false, configurable: true, value: ƒ} getUTCHours : {writable: true, enumerable: false, configurable: true, value: ƒ} getUTCMilliseconds : {writable: true, enumerable: false, configurable: true, value: ƒ} getUTCMinutes : {writable: true, enumerable: false, configurable: true, value: ƒ} getUTCMonth : {writable: true, enumerable: false, configurable: true, value: ƒ} getUTCSeconds : {writable: true, enumerable: false, configurable: true, value: ƒ} getYear : {writable: true, enumerable: false, configurable: true, value: ƒ} setDate : {writable: true, enumerable: false, configurable: true, value: ƒ} setFullYear : {writable: true, enumerable: false, configurable: true, value: ƒ} setHours : {writable: true, enumerable: false, configurable: true, value: ƒ} setMilliseconds : {writable: true, enumerable: false, configurable: true, value: ƒ} setMinutes : {writable: true, enumerable: false, configurable: true, value: ƒ} setMonth : {writable: true, enumerable: false, configurable: true, value: ƒ} setSeconds : {writable: true, enumerable: false, configurable: true, value: ƒ} setTime : {writable: true, enumerable: false, configurable: true, value: ƒ} setUTCDate : {writable: true, enumerable: false, configurable: true, value: ƒ} setUTCFullYear : {writable: true, enumerable: false, configurable: true, value: ƒ} setUTCHours : {writable: true, enumerable: false, configurable: true, value: ƒ} setUTCMilliseconds : {writable: true, enumerable: false, configurable: true, value: ƒ} setUTCMinutes : {writable: true, enumerable: false, configurable: true, value: ƒ} setUTCMonth : {writable: true, enumerable: false, configurable: true, value: ƒ} setUTCSeconds : {writable: true, enumerable: false, configurable: true, value: ƒ} setYear : {writable: true, enumerable: false, configurable: true, value: ƒ} toDateString : {writable: true, enumerable: false, configurable: true, value: ƒ} toGMTString : {writable: true, enumerable: false, configurable: true, value: ƒ} toISOString : {writable: true, enumerable: false, configurable: true, value: ƒ} toJSON : {writable: true, enumerable: false, configurable: true, value: ƒ} toLocaleDateString : {writable: true, enumerable: false, configurable: true, value: ƒ} toLocaleTimeString : {writable: true, enumerable: false, configurable: true, value: ƒ} toTimeString : {writable: true, enumerable: false, configurable: true, value: ƒ} toUTCString : {writable: true, enumerable: false, configurable: true, value: ƒ}
Date 對象方法描述
方法 | 描述 |
---|---|
Date.parse( ) | 解析並返回日期和時間的字符串表示的內部毫秒表示日期。 |
Date.UTC( ) | 返回指定的毫秒表示UTC日期和時間。 |
Date.prototype 對象方法描述
方法 | 描述 |
---|---|
Date() | 返回今天的日期及時間。 |
getDate() | 按照本地模式返回指定日期是哪日。 |
getDay() | 按照本地模式返回指定日期是周幾。 |
getFullYear() | 按照本地模式返回指定日期是哪一年。 |
getMilliseconds() | 按照本地模式返回指定日期是幾毫秒。 |
getMinutes() | 按照本地模式返回指定日期是幾分。 |
getMonth() | 按照本地模式返回指定日期的月份。 |
getSeconds() | 按照本地模式返回指定日期是幾秒。 |
getTime() | 按照本地模式當前的格林威治時間。 |
getTimezoneOffset() | 以分鍾為單位返回時間偏差。 |
getUTCDate() | 按照世界統一時間返回指定日期是幾號。 |
getUTCDay() | 按照世界統一時間返回指定日期是周幾。 |
getUTCFullYear() | 按照世界統一時間返回指定日的年份。 |
getUTCHours() | 按照世界統一時間返回指定日期是幾時。 |
getUTCMilliseconds() | 按照世界統一時間返回指定日期的毫秒數。 |
getUTCMinutes() | 按照世界統一時間返回指定日期的分鍾數。 |
getUTCMonth() | 按照世界統一時間返回指定日期的月份。 |
getUTCSeconds() | 按照世界統一時間返回指定日期的秒數。 |
setDate() | 按照本地模式設置日期。 |
setFullYear() | 按照本地模式設置年份。 |
setHours() | 按照本地模式設置小時。 |
setMilliseconds() | 按照本地模式設置毫秒數。 |
setMinutes() | 按照本地模式設置分鍾數。 |
setMonth() | 按照本地模式設置月份。 |
setSeconds() | 按照本地模式設置秒數。 |
setTime() | 按照格林威治格式設置毫秒數。 |
setUTCDate() | 按照世界統一時間設置日期。 |
setUTCFullYear() | 按照世界統一時間設置年份。 |
setUTCHours() | 按照世界統一時間設置小時數。 |
setUTCMilliseconds() | 按照世界統一時間設置毫秒數。 |
setUTCMinutes() | 按照世界統一時間設置分鍾數。 |
setUTCMonth() | 按照世界統一時間設置月份。 |
setUTCSeconds() | 按照世界統一時間設置秒數。 |
toDateString() | 返回日期的字符串。 |
toLocaleDateString() | 按照本地模式,返回日期的字符串。 |
toLocaleFormat() | 使用格式字符串,將日期轉換為一個字符串。 |
toLocaleString() | 使用當前語言環境的約定將日期轉換為一個字符串。 |
toLocaleTimeString() | 返回日期的“時間”部分作為一個字符串,使用當前語言環境的約定。 |
toSource() | 返回一個字符串代表一個等價的日期對象的來源,您可以使用這個值來創建一個新的對象。 |
toString() | 返回一個字符串代表指定的日期對象。 |
toTimeString() | 返回日期的“時間”部分以字符串形式。 |
toUTCString() | 使用通用時間約定,將日期轉換為一個字符串。 |
valueOf() | 返回日期對象的原始值。 |
Date對象:封裝一個時間點,提供操作時間的API。Date對象中封裝的是從1970年1月1日0點至今的毫秒數。
創建Date對象的4種方式:
new Date(); // 創建當前時刻的日期與時間 new Date(value); // value:一個 Unix 時間戳(Unix Time Stamp),它是一個整數值,表示自1970年1月1日00:00:00 UTC(the Unix epoch)以來的毫秒數,忽略了閏秒。請注意大多數 Unix 時間戳功能僅精確到最接近的秒。 new Date(dateString); // dateString:表示日期的字符串值。該字符串應該能被 Date.parse() 正確方法識別(即符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)。 new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]); // year // 表示年份的整數值。 0到99會被映射至1900年至1999年,其它值代表實際年份。 // monthIndex // 表示月份的整數值,從 0(1月)到 11(12月)!!!。 // day 可選 // 表示一個月中的第幾天的整數值,從1開始。默認值為1。 // hours 可選 // 表示一天中的小時數的整數值 (24小時制)。默認值為0(午夜)。 // minutes 可選 // 表示一個完整時間(如 01:10:00)中的分鍾部分的整數值。默認值為0。 // seconds 可選 // 表示一個完整時間(如 01:10:00)中的秒部分的整數值。默認值為0。 // milliseconds 可選 // 表示一個完整時間的毫秒部分的整數值。默認值為0。
日期分量:FullYear、Month、Date、Day、Hours、Minutes、Seconds、Milliseconds。
每一個日期分量都有一個get
和set
方法(除了Day沒有set方法),分別用於獲取和設置時間對象。日期的單位及范圍:
年FullYear (無范圍)
月Month (0~11, 0開始,沒有12)
日Date (1~31, 和現實生活一樣)
星期Day (0~6, 0是星期日,沒有7)
時Hours (0~23. 0開始,沒有24)
分Minutes (0~59)
秒Seconds (0~59)
毫秒MilliSeconds
Date 常用方法示例:
var oDate = new Date(); console.log('當前:',oDate.toLocaleString()) var getTime = oDate.getTime(); //格林威治時間 var y = oDate.getFullYear(); // 年份 var mon = oDate.getMonth()+1; //月份 var d = oDate.getDate(); //日期 var dw = oDate.getDay(); //星期幾 var h = oDate.getHours(); //時 var m = oDate.getMinutes(); //分 var s = oDate.getSeconds(); //秒 var ms = oDate.getMilliseconds(); //毫秒 console.log('格林威治時間:',getTime) console.log('年份:',y) console.log('月份:',mon) console.log('日期:',d) console.log('星期:',dw) console.log('時:',h) console.log('分:',m) console.log('秒:',s) console.log('毫秒:',ms)
偶爾會用到的小方法:
// 不夠兩位數的補全, function setTen (num) { // 注意確保num是正整數再使用,例子中非正整數一律原樣返回,請根據業務實際情況進行更謹慎判斷 return num >= 0 && num < 10? '0'+ parseInt(num): num } // 傳入星期幾返回對應中文 function setDay (day) { // 注意day為0-6的數字!!!此處舉例未對day判斷 var week = ['日', '一', '二', '三', '四', '五', '六']; return week[day] } var oDate = new Date(); var mon = setTen(oDate.getMonth()+1); //月份 var d = setTen(oDate.getDate()); //日期 var w = setDay(oDate.getDay()); //星期幾 var h = setTen(oDate.getHours()); //時 var m = setTen(oDate.getMinutes()); //分 var s = setTen(oDate.getSeconds()); //秒 console.log('月份:',mon) console.log('日期:',d) console.log('星期:',w) console.log('時:',h) console.log('分:',m) console.log('秒:',s)
獲得指定日期之前或之后的某個時間點 ( Fri Jan DD YYYY hh:mm:ss GMT+0800 (中國標准時間) )
// 獲得指定日期之前或之后的某個時間 function getAfterDate(d,i,type) { var t = new Date(d) //////////////////////////////////////////////////////////////////// // d (用於增減的日期) 合法參數:任何能被 new Date() 轉化的日期 // i (增減數量) 合法參數:正負整數 與 0 // type (日期類型) 合法參數: // 年 : year、y、年 // 月 : month、mon、月 // 周 : week、w、周 // 日 : day、d、天、日 // 時 : hours、h、時、小時 // 分 : minutes、m、分、分鍾 // 秒 : seconds、s、秒、秒鍾 // 毫秒 : milliseconds、ms、毫秒 ///////////////////////////////////////////////////////////////////// if (type == 'year' || type == 'y' || type == '年') {return new Date(t.setFullYear(t.getFullYear() + i))} if (type == 'month' || type == 'mon' || type == '月') {return new Date(t.setMonth(t.getMonth() + i))} if (type == 'week' || type == 'w' || type == '周') {return new Date(t.setDate(t.getDate() + i*7))} if (type == 'day' || type == 'd' || type == '天'|| type == '日') {return new Date(t.setDate(t.getDate() + i))} if (type == 'hours' || type == 'h' || type == '時') {return new Date(t.setHours(t.getHours() + i))} if (type == 'minutes' || type == 'm' || type == '分' || type == '分鍾') {return new Date(t.setMinutes(t.getMinutes() + i))} if (type == 'seconds' || type == 's' || type == '秒' || type == '秒鍾') {return new Date(t.setSeconds(t.getSeconds() + i))} if (type == 'milliseconds' || type == 'ms' || type == '毫秒') {return new Date(t.setMilliseconds(t.getMilliseconds() + i))} return '參數有誤' } console.log('now: ',new Date()) // 當前時間 console.log('y ',getAfterDate(new Date(),3,'年')) // 三年后 console.log('m ',getAfterDate(new Date(),3,'月')) // 三個月后 console.log('w ',getAfterDate(new Date(),3,'周')) // 三周后 console.log('d ',getAfterDate(new Date(),-3,'天')) // 三天前 console.log('h ',getAfterDate(new Date(),-1,'時')) // 一小時前 console.log('s ',getAfterDate(new Date(),-30,'分')) // 三十分鍾前 console.log('m ',getAfterDate(new Date(),300,'秒')) // 三百秒鍾后 console.log('ms ',getAfterDate(new Date(),3000,'ms')) // 三千毫秒后
獲得指定日期之前或之后的某個時間點的本地時間格式 ( YYYY/MM/DD 上午 hh:mm:ss )
// 獲得指定日期之前或之后的某個時間點的本地時間格式,各參數可先判空判值之類優化 function getAfterLocalDate(d,i,type) { //////////////////////////////////////////////////////////////////// // d (用於增減的日期) 合法參數:任何能被 new Date() 轉化的日期 // i (增減數量) 合法參數:正負整數 與 0 // type (日期類型) 合法參數: // 年 : year、y、年 // 月 : month、mon、月 // 周 : week、w、周 // 日 : day、d、天、日 // 時 : hours、h、時、小時 // 分 : minutes、m、分、分鍾 // 秒 : seconds、s、秒、秒鍾 // 毫秒 : milliseconds、ms、毫秒 ///////////////////////////////////////////////////////////////////// var t = new Date(d) var yObj = {a:['year','y','年'],s:'setFullYear',g:'getFullYear'} var monObj= {a:['month','mon','月'],s:'setMonth',g:'getMonth'} var wObj = {a:['week','w','周'],s:'setDate',g:'getDate'} var dObj = {a:['day','d','天','日'],s:'setDate',g:'getDate'} var hObj = {a:['hours','h','時'],s:'setHours',g:'getHours'} var mObj = {a:['minutes','m','分','分鍾'],s:'setMinutes',g:'getMinutes'} var sObj = {a:['seconds','s','秒','秒鍾'],s:'setSeconds',g:'getSeconds'} var msObj = {a:['milliseconds','ms','毫秒'],s:'setMilliseconds',g:'getMilliseconds'} var nt = null var o = [yObj,monObj,wObj,dObj,hObj,mObj,sObj,msObj] o.forEach(function (v) { if ( v.a.indexOf(type) > 0) { nt = new Date(t[v.s](t[v.g]() + i)) } }) return nt.toLocaleString() } // 使用與上面示例相同 console.log('y ',getAfterLocalDate(new Date(),3,'年')) console.log('mon ',getAfterLocalDate(new Date(),3,'月')) console.log('w ',getAfterLocalDate(new Date(),3,'周')) console.log('d ',getAfterLocalDate(new Date(),-3,'日')) console.log('h ',getAfterLocalDate(new Date(),-1,'時')) console.log('s ',getAfterLocalDate(new Date(),-30,'分')) console.log('m ',getAfterLocalDate(new Date(),300,'秒')) console.log('ms ',getAfterLocalDate(new Date(),3000,'ms'))
自定義一個實例方法:
// 給Date的實例定義一個方法 Date.prototype.isExpired = function (d,i,type) { if (d === undefined || i === undefined || type === undefined ) { return '參數有誤' } //////////////////////////////////////////////////////////////////// // d (用於增減的日期) 合法參數:任何能被 new Date() 轉化的日期 // i (增減數量) 合法參數:正負整數 與 0 // type (日期類型) 合法參數: // 年 : year、y、年 // 月 : month、mon、月 // 周 : week、w、周 // 日 : day、d、天、日 // 時 : hours、h、時、小時 // 分 : minutes、m、分、分鍾 // 秒 : seconds、s、秒、秒鍾 // 毫秒 : milliseconds、ms、毫秒 ///////////////////////////////////////////////////////////////////// var t = new Date(d) var yObj = {a:['year','y','年'],s:'setFullYear',g:'getFullYear'} var monObj = {a:['month','mon','月'],s:'setMonth',g:'getMonth'} var wObj = {a:['week','w','周'],s:'setDate',g:'getDate'} var dObj = {a:['day','d','天','日'],s:'setDate',g:'getDate'} var hObj = {a:['hours','h','時'],s:'setHours',g:'getHours'} var mObj = {a:['minutes','m','分','分鍾'],s:'setMinutes',g:'getMinutes'} var sObj = {a:['seconds','s','秒','秒鍾'],s:'setSeconds',g:'getSeconds'} var msObj = {a:['milliseconds','ms','毫秒'],s:'setMilliseconds',g:'getFullYear'} var nt = null // 存儲 t 增減后的時間點 var o = [yObj,monObj,wObj,dObj,hObj,monObj,sObj,msObj] o.forEach(function (v) { if ( v.a.indexOf(type) > 0 ) { nt = new Date(t[v.s](t[v.g]() + i)) // 獲取相應時間點進行增減 } }) // 缺陷:參數d 和 this 都是 new Date() 時,對比只有極小幾率相等,因為方法由調用到運行之間有時間差,有可能耗費了幾毫秒或以上 return nt < this // 參數 d 時間點增減后 與 this 時間點對比 } var now = new Date() var oDate = new Date('2020/1/1 11:11:11') console.log('2020/1/1 11:11:11 的三年后早於當前時間嗎? ',now.isExpired(oDate,3,'年')) console.log('2020/1/1 11:11:11 的九個月后早於當前時間嗎?',now.isExpired(oDate,9,'月')) console.log('現在的三周后早於 2020/1/1 11:11:11 嗎? ',oDate.isExpired(now,3,'周')) console.log('2020/1/1 11:11:11 的三天前早於當前時間嗎? ',now.isExpired(new Date(),-3,'日')) console.log('現在的一個小時前早於 2020/1/1 11:11:11 嗎? ',oDate.isExpired(now,-1,'時')) console.log('2020/1/1 11:11:11 的三十分鍾前早於 2020/1/1 11:11:11 嗎? ',oDate.isExpired(oDate,-30,'分')) console.log('現在的三百秒后早於 2020/1/1 11:11:11 嗎? ',oDate.isExpired(new Date(),300,'秒')) console.log('現在的三千毫秒前早於 2020/1/1 11:11:11 嗎?',oDate.isExpired(new Date(),-3000,'ms'))
JavaScript 中的三大對象 (本地對象、內置對象、 宿主對象)
本地對象
- Object 對象屬性和方法
- String 對象屬性和方法
- Array 對象屬性和方法
- Date 對象屬性和方法
- Number 對象屬性和方法
- RegExp 對象屬性和方法
- Function 對象屬性和方法
- Boolean 對象屬性和方法
- Error 對象屬性和方法
內置對象
宿主對象