javascript
JS学习--Date对象
Date對象是 JavaScript 原生的時間庫。它以1970年1月1日00:00:00作為時間的零點, 可以表示的時間范圍是前后各1億天(單位為毫秒)。
一、普通函數的用法
Date對象可以作為普通函數直接調用,返回一個代表當前時間的字符串。
注意,即使帶有參數,Date作為普通函數使用時,返回的還是當前時間。上面代碼說明,無論有沒有參數,直接調用Date總是返回當前時間。
二、構造函數的用法
Date還可以當作構造函數使用。對它使用new命令,會返回一個Date對象的實例。如果不加參數,實例代表的就是當前時間。
Date實例有一個獨特的地方。其他對象求值的時候,都是默認調用.valueOf()方法,但是Date實例求值的時候,默認調用的是toString()方法。這導致對Date實例求值,返回的是一個字符串,代表該實例對應的時間。上面代碼中,today是Date的實例,直接求值等同于調用toString方法。
作為構造函數時,Date對象可以接受多種格式的參數,返回一個該參數對應的時間實例。
關于Date構造函數的參數,有幾點說明。 第一點,參數可以是負整數,代表1970年元旦之前的時間。第二點,只要是能被Date.parse()方法解析的字符串,都可以當作參數。
上面多種日期字符串的寫法,返回的都是同一個時間。
第三,參數為年、月、日等多個整數時,年和月是不能省略的,其他參數都可以省略的。也就是說,這時至少需要兩個參數,因為如果只使用“年”這一個參數,Date會將其解釋為毫秒數。
上面代碼中,不管有幾個參數,返回的都是2013年1月1日零點。最后,各個參數的取值范圍如下。
年:使用四位數年份,比如2000。如果寫成兩位數或個位數,則加上1900,即10代表1910年。如果是負數,表示公元前。月:0表示一月,依次類推,11表示12月。日:1到31。小時:0到23。分鐘:0到59。秒:0到59毫秒:0到999。 復制代碼注意,月份從0開始計算,但是,天數從1開始計算。另外,除了日期的默認值為1,小時、分鐘、秒鐘和毫秒的默認值都是0。
這些參數如果超出了正常范圍,會被自動折算。比如,如果月設為15,就折算為下一年的4月。
上面代碼的第二個例子,日期設為0,就代表上個月的最后一天。參數還可以使用負數,表示扣去的時間。
上面代碼中,分別對月和日使用了負數,表示從基準日扣去相應的時間。
三、日期的運算
類型自動轉換時,Date實例如果轉為數值,則等于對應的毫秒數;如果轉為字符串,則等于對應的日期字符串。所以,兩個日期實例對象進行減法運算時,返回的是它們間隔的毫秒數;進行加法運算時,返回的是兩個字符串連接而成的新字符串。
四、靜態方法4.1 Date.now()
Date.now方法返回當前時間距離時間零點(1970年1月1日 00:00:00 UTC)的毫秒數,相當于 Unix 時間戳乘以1000。
4.2 Date.parse()Date.parse方法用來解析日期字符串,返回該時間距離時間零點(1970年1月1日 00:00:00)的毫秒數。
日期字符串應該符合 RFC 2822 和 ISO 8061 這兩個標準,即YYYY-MM-DDTHH:mm:ss.sssZ格式,其中最后的Z表示時區。但是,其他格式也可以被解析,請看下面的例子。
如果解析失敗,返回NaN。
4.3 Date.UTC()Date.UTC方法接受年、月、日等變量作為參數,返回該時間距離時間零點(1970年1月1日 00:00:00 UTC)的毫秒數。
該方法的參數用法與Date構造函數完全一致,比如月從0開始計算,日期從1開始計算。區別在于Date.UTC方法的參數,會被解釋為 UTC 時間(世界標準時間),Date構造函數的參數會被解釋為當前時區的時間。
// 格式Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]]) 復制代碼 五、實例方法Date的實例對象,有幾十個自己的方法,除了valueOf和toString,可以分為以下三類。
to類:從Date對象返回一個字符串,表示指定的時間。get類:獲取Date對象的日期和時間。set類:設置Date對象的日期和時間。 復制代碼5.1 Date.prototype.valueOf()
valueOf方法返回實例對象距離時間零點(1970年1月1日00:00:00 UTC)對應的毫秒數,該方法等同于getTime方法。
預期為數值的場合,Date實例會自動調用該方法,所以可以用下面的方法計算時間的間隔。 var start = new Date();// ...var end = new Date();var elapsed = end - start; 復制代碼5.2 to類方法
(1)Date.prototype.toString()
toString方法返回一個完整的日期字符串。
因為toString是默認的調用方法,所以如果直接讀取Date實例,就相當于調用這個方法。(2)Date.prototype.toUTCString()
toUTCString方法返回對應的 UTC 時間,也就是比北京時間晚8個小時。
(3)Date.prototype.toISOString()toISOString方法返回對應時間的 ISO8601 寫法。
注意,toISOString方法返回的總是 UTC 時區的時間。
(4)Date.prototype.toJSON()toJSON方法返回一個符合 JSON 格式的 ISO 日期字符串,與toISOString方法的返回結果完全相同。
(5)Date.prototype.toDateString()toDateString方法返回日期字符串(不含小時、分和秒)。
(6)Date.prototype.toTimeString()toTimeString方法返回時間字符串(不含年月日)。
(7)Date.prototype.toLocaleDateString()toLocaleDateString方法返回一個字符串,代表日期的當地寫法(不含小時、分和秒)。
(8)Date.prototype.toLocaleTimeString()toLocaleTimeString方法返回一個字符串,代表時間的當地寫法(不含年月日)。
5.3 get類方法Date對象提供了一系列get*方法,用來獲取實例對象某個方面的值。
getTime():返回實例距離1970年1月1日00:00:00的毫秒數,等同于valueOf方法。getDate():返回實例對象對應每個月的幾號(從1開始)。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*方法返回的都是整數,不同方法返回值的范圍不一樣。
分鐘和秒:0 到 59小時:0 到 23星期:0(星期天)到 6(星期六)日期:1 到 31月份:0(一月)到 11(十二月)年份:距離1900年的年數 復制代碼 上面代碼中,最后一行返回-480,即 UTC 時間減去當前時間,單位是分鐘。-480表示 UTC 比當前時間少480分鐘,即當前時區比 UTC 早8個小時。上面這些get*方法返回的都是當前時區的時間,Date對象還提供了這些方法對應的 UTC 版本,用來返回 UTC 時間
getUTCDate()getUTCFullYear()getUTCMonth()getUTCDay()getUTCHours()getUTCMinutes()getUTCSeconds()getUTCMilliseconds() 復制代碼 上面代碼中,實例對象d表示當前時區(東八時區)的7月16日0點0分0秒,這個時間對于當前時區來說是7月16日,所以getDate方法返回16,對于 UTC 時區來說是7月15日,所以getUTCDate方法返回15。5.4 set類方法
Date對象提供了一系列set*方法,用來設置實例對象的各個方面。
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):設置毫秒時間戳。 復制代碼這些方法基本是跟get*方法一一對應的,但是沒有setDay方法,因為星期幾是計算出來的,而不是設置的。另外,需要注意的是,凡是涉及到設置月份,都是從0開始算的,即0是1月,11是12月。
set*方法的參數都會自動折算。以setDate為例,如果參數超過當月的最大天數,則向下一個月順延,如果參數是負數,表示從上個月的最后一天開始減去的天數。 set類方法和get類方法,可以結合使用,得到相對時間。 var d = new Date();// 將日期向后推1000天d.setDate(d.getDate() + 1000);// 將時間設為6小時后d.setHours(d.getHours() + 6);// 將年份設為去年d.setFullYear(d.getFullYear() - 1); 復制代碼set*系列方法除了setTime()和setYear(),都有對應的 UTC 版本,即設置 UTC 時區的時間。
setUTCDate()setUTCFullYear()setUTCHours()setUTCMilliseconds()setUTCMinutes()setUTCMonth()setUTCSeconds() 復制代碼上面代碼中,本地時區(東八時區)的7月16日0點0分,是 UTC 時區的前一天下午16點。設為 UTC 時區的22點以后,就變為本地時區的上午6點。
本文轉載自http://javascript.ruanyifeng.com/stdlib/date.html
轉載于:https://juejin.im/post/5b4c3f41e51d45191f0ce72a
總結
以上是生活随笔為你收集整理的JS学习--Date对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 多线程技术总结
- 下一篇: Spring(七)持久层