ECMAScript 中的Date 類型是在早期Java 中java.util.Date 類基礎上構建的。爲此,Date
類型使用UTC (Coordinated Universal Time,國際協調時間[又稱世界統一時間]) 1970 年1 月
1 日午夜(零時)開始通過的毫秒來保存日期。在使用這種數據存儲格式的條件下,Date 類型
保存的日期可以精確到1970 年1 月1 日以前或以後的285616 年。java
建立一個日期對象,使用new 運算符和Date 構造方法(構造函數)便可。瀏覽器
- var box = new Date(); //建立一個日期對象
在調用Date 構造方法而不傳遞參數的狀況下,新建的對象自動獲取當前的時間和日期。ide
- alert(box); //不一樣瀏覽器顯示不一樣
ECMAScript 提供了兩個方法,Date.parse()和Date.UTC()。Date.parse()方法接收一個表
示日期的字符串參數,而後嘗試根據這個字符串返回相應的毫秒數。ECMA-262 沒有定義
Date.parse()應該支持哪一種日期格式,所以方法的行爲因實現而異,因地區而異。默認一般接
收的日期格式以下:
1.'月/日/年',如6/13/2011;
2.'英文月名日, 年',如May 25, 2004;
3.'英文星期幾英文月名日年時:分:秒時區',如Tue May 25 2004 00:00:00 GMT-070函數
- alert(Date.parse('6/13/2011')); //1307894400000
若是Date.parse()沒有傳入或者不是標準的日期格式,那麼就會返回NaN。spa
- alert(Date.parse()); //NaN
若是想輸出指定的日期,那麼把Date.parse()傳入Date 構造方法裏。對象
- var box = new Date(Date.parse('6/13/2011'));//Mon Jun 13 2011 00:00:00 GMT+0800
- var box = new Date('6/13/2011'); //直接傳入,Date.parse()後臺被調用
PS:Date 對象及其在不一樣瀏覽器中的實現有許多奇怪的行爲。其中有一種傾向是將超
出的範圍的值替換成當前的值,以便生成輸出。例如,在解析「January 32, 2007」時,有的
瀏覽器會講其解釋爲「February 1, 2007」。而Opera 則傾向與插入當前月份的當前日期。ip
Date.UTC()方法一樣也返回表示日期的毫秒數,但它與Date.parse()在構建值時使用不一樣
的信息。(年份,基於0 的月份[0 表示1 月,1 表示2 月],月中的哪一天[1-31],小時數[0-23],
分鐘,秒以及毫秒)。只有前兩個參數是必須的。若是沒有提供月數,則天數爲1;若是省
略其餘參數,則通通爲0.字符串
- alert(Date.UTC(2011,11)); //1322697600000
若是Date.UTC()參數傳遞錯誤,那麼就會出現負值或者NaN 等非法信息。get
- alert(Date.UTC()); //負值或者NaN
若是要輸出指定日期,那麼直接把Date.UTC()傳入Date 構造方法裏便可。string
- var box = new Date(Date.UTC(2011,11, 5, 15, 13, 16));
日期格式化方法
Date 類型還有一些專門用於將日期格式化爲字符串的方法。
- var box = new Date();
- alert(box.toDateString()); //以特定的格式顯示星期幾、月、日和年 Sat Dec 29 2012
- alert(box.toTimeString()); //以特定的格式顯示時、分、秒和時區 14:25:20 GMT+0800
- alert(box.toLocaleDateString()); //以特定地區格式顯示星期幾、月、日和年 2012年12月29日
- alert(box.toLocaleTimeString()); //以特定地區格式顯示時、分、秒和時區 14:26:29
- alert(box.toUTCString()); //以特定的格式顯示完整的UTC 日期。 Sat, 29 Dec 2012 06:27:00 GMT
組件方法
組件方法,是爲咱們單獨獲取你想要的各類時間/日期而提供的方法。須要注意的時候,
這些方法中,有帶UTC 的,有不帶UTC 的。UTC 日期指的是在沒有時區誤差的狀況下的
日期值。
- alert(box.getTime()); //獲取日期的毫秒數,和valueOf()返回一致
- alert(box.setTime(100)); //以毫秒數設置日期,會改變整個日期
- alert(box.getFullYear()); //獲取四位年份
- alert(box.setFullYear(2012)); //設置四位年份,返回的是毫秒數
- alert(box.getMonth()); //獲取月份,沒指定月份,從0 開始算起
- alert(box.setMonth(11)); //設置月份
- alert(box.getDate()); //獲取日期
- alert(box.setDate(8)); //設置日期,返回毫秒數
- alert(box.getDay()); //返回星期幾,0 表示星期日,6 表示星期六
- alert(box.setDay(2)); //設置星期幾
- alert(box.getHours()); //返回時
- alert(box.setHours(12)); //設置時
- alert(box.getMinutes()); //返回分鐘
- alert(box.setMinutes(22)); //設置分鐘
- alert(box.getSeconds()); //返回秒數
- alert(box.setSeconds(44)); //設置秒數
- alert(box.getMilliseconds()); //返回毫秒數
- alert(box.setMilliseconds()); //設置毫秒數
- alert(box.getTimezoneOffset()); //返回本地時間和UTC 時間相差的分鐘數
PS:以上方法除了getTimezoneOffset(),其餘都具備UTC 功能,例如setDate()及getDate() 獲取星期幾,那麼就會有setUTCDate()及getUTCDate()。表示世界協調時間。