在日期和時間這一塊的學(xué)習(xí)中發(fā)現(xiàn),其實和其他大部分的高級語言中時間和日期的操作差不多,沒什么特別的,但是要注意的就是 ECMAScript中規(guī)定的一些方法在 各大瀏覽器中的實現(xiàn)方式是不一樣的,也就是說存在瀏覽器的不兼容問題,練習(xí)中主要是用的IE9,很少測試其他瀏覽器,故后面的練習(xí)結(jié)果都是基于IE9瀏覽器的結(jié)果,其他瀏覽器的結(jié)果可能不一
1、Date 類型 ECMAScript中的Date類型使用的是UTC(世界統(tǒng)一時間)1970年1月1日零時開始進過的毫秒來保存的時間與日期。
創(chuàng)建一個Date對象和創(chuàng)建一個Object對象差不多,通過new關(guān)鍵字和構(gòu)造函數(shù)來創(chuàng)建的。如果創(chuàng)建的時候沒有傳遞參數(shù),那么默認的獲取的是本地的當(dāng)前時間
ECMAScript提供了兩個靜態(tài)方法 Date.parse()和Date.UTC();都是接受參數(shù)返回毫秒
Date.parse()中接收的是表示日期的字符串,一般常用的格式都可以,年月日/日月年,如果沒有給出時間就默認的是0,如'2013-01-13 12:34:24';當(dāng)然也包含英文寫法,'英文月名 日, 年',如 May 25, 2004;.'英文星期幾 英文月名 日 年 時:分:秒 時區(qū)', 如 'Tue May 25 2004 00:00:00 GMT-070';如果不滿足上面的一些要求就會返回一個NaN
Eg:alert(Date.parse('6/13/2011')); //1307894400000
Date.UTC()方法同樣也返回表示日期的毫秒數(shù), 但它與 Date.parse()在構(gòu)建值時使用不同的信息。 (年份, 基于 0 的月份[0 表示 1 月, 1 表示 2 月], 月中的哪一天[1-31], 小時數(shù)[0-23],分鐘,秒以及毫秒)。只有前兩個參數(shù)是必須的。如果沒有提供 月數(shù),則天數(shù)為 1;如果省略其他參數(shù),則統(tǒng)統(tǒng)為 0. eg:Date.UTC(2013,11,25);傳遞 的是有效的數(shù)值非字符串
如果輸入的參數(shù)不正確就會返回NaN或者是負數(shù)等非法信息 Date.UTC('2012-12');
由于創(chuàng)建日期的時候是可以傳遞一個參數(shù)的,故需要輸出指定的日期的時候,將上面兩個方法的返回值傳遞給Date()的構(gòu)造函數(shù)即可,new Date(Date.parse('2014/01/02'));new Date(Date.UTC());當(dāng)然對于Date.parse()可以直接傳遞復(fù)合個數(shù)的數(shù)值字符串給Date構(gòu)造函數(shù),因為系統(tǒng)會自動的調(diào)用Date.parse()函數(shù),eg:new Date('2014-01-02');
2、通用的方法: toString()(返回UTC格式時間), toLocaleString()(返回本地格式), valueOf()(返回毫秒數(shù))
3、日期格式化方法
toDateString()
toTimeString()
toLocaleDateString()
toLocaleTimeString()
toUTCString()
| toDateString() //以特定的格式顯示星期幾、月、日和年 toTimeString() //以特定的格式顯示時分秒和時區(qū) toLocaleDateString() //以特定本地區(qū)格式顯示日期 toLocaleTimeString() //以特定的本地區(qū)格式顯示時間和時區(qū) toUTCString() //以特定格式顯示UTC日期
toDateString()
toTimeString()
toLocaleDateString()
toLocaleTimeString()
toUTCString()
|
1
2
3
4
5 |
toDateString()
toTimeString()
toLocaleDateString()
toLocaleTimeString()
toUTCString()
|
4、組件方法(重要) 下面的set方法是設(shè)置時間變量中的某一部分值,get方法是獲取值
box.getTime() //獲取日期的毫秒數(shù),和valueOf的返回值是一樣的 box.setTime(100) //一毫秒數(shù)來設(shè)置時間,會改變整個日期,因為日期是以毫秒數(shù)保存的 box.getYear() //獲取的是當(dāng)前年份相對與1900的間隔時間 box.setYear(114) //以間隔時間來設(shè)置年份, box.getFullYear() //獲取日期中的四位年份部分,返回的是當(dāng)前年如:2014 box.setFullYear(2014) //設(shè)置四位年份部分,返回的是毫秒數(shù) box.getMonth() //獲取月份,如果沒有指定月份,則從0開始算起(0表示一月份) box.setMonth(11) //設(shè)置月份,11表示的是第十二月份 box.getDate() //獲取的是當(dāng)前的日期 box.setDate(23) //設(shè)置日期,返回的是毫秒數(shù) box.getDay() //獲取的是當(dāng)前時間中的星期幾,0表示星期1,6表示星期6 box.setDay(2) //設(shè)置星期幾 box.getHours() //獲取當(dāng)前日期中的時間部分 box.setHours(12) //返回時,24小時制 box.getMinutes() //獲取當(dāng)前日期中的分鐘部分 box.setMinutes(22) //設(shè)置分鐘 box.getSeconds() //獲取秒鐘 box.setSeconds(23) //設(shè)置秒鐘 box.getMillseconds() //獲取毫秒數(shù) box.setMillseconds(233) //設(shè)置毫秒數(shù) box.getTimezoneOffset() //返回本地時間和UTC時間相差的分鐘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
box.getTime()
box.setTime(100)
box.getYear()
box.setYear(114)
box.getFullYear()
box.setFullYear(2014)
box.getMonth()
box.setMonth(11)
box.getDate()
box.setDate(23)
box.getDay()
box.setDay(2)
box.getHours()
box.setHours(12)
box.getMinutes()
box.setMinutes(22)
box.getSeconds()
box.setSeconds(23)
box.getMillseconds()
box.setMillseconds(233)
box.getTimezoneOffset()
|
注:上面的方法中除了最后一個方法 box.setTimezoneOffset()以外,其他的方法都具有UTC功能,以便和世界時間相協(xié)調(diào),如:setDate()和getDate()對應(yīng)的UTC方法是setUTCDate()和getUTCDate(
/*
//創(chuàng)建一個日期類的對象,通過構(gòu)造方法,此處沒有傳遞參數(shù),獲取的是本的時間(瀏覽器各異) var time=new Date(); alert(time);//Thu Jan 02 2014 15:06:46 GMT+0800 (China Standard Time)
// Date.parse() 和 Date.UTC() 是Date類型提供的兩個靜態(tài)方法。不需要創(chuàng)建對象的 //Date.parse() 返回指定日期的毫秒數(shù),指定日期有三種格式,不符合格式會返回NaN // 字符串括起來的日月年 '4/3/2013'; var box=Date.parse('15/01/2013'); alert(box);//1393603200000 var age=Date.parse('15-01-2013'); alert(age);//1393603200000 var time=Date.parse('2013-01-15'); alert(time);//1358208000000 alert(Date.parse('2013-15-01'));//NaN
//'英文月 日,年' var time=Date.parse('May 25,2013'); alert(time);//1369411200000 time=Date.parse('May,25,2013'); alert(time);//1369411200000 var ti=Date.parse('25,May,2013'); alert(ti);//1369411200000 var t=Date.parse('2013,May,25'); alert(t);//1369411200000 var box=Date.parse('2013,25,May'); alert(box);//1369411200000 var age=Date.parse('2013-May-25'); alert(age);//NaN
//'英文星期幾 英文月名 日 年 時:分:秒 時區(qū)', 如 Tue May 25 2004 00:00:00 GMT-070 alert(Date.parse('Tue May 25 2004 00:00:00 GMT-070'));//1085447400000
//如果想輸出具體的日期和時間,可以把值傳入 Data 的構(gòu)造函數(shù)里面 var box=new Date(Date.parse('15-01-2013')); alert(box);//Sat Mar 01 2014 00:00:00 GMT+0800 (China Standard Time)
//可以不用寫 Date.parse() 而是直接傳入一個符合上面三種格式的日期, //系統(tǒng)會自動的調(diào)用 Date.parse()方法 var box=new Date('15-01-2013'); alert(box);//Sat Mar 01 2014 00:00:00 GMT+0800 (China Standard Time)
//Date 對象及其在不同瀏覽器中的實現(xiàn)有許多奇怪的行為。其中有一種傾向是將超 //出的范圍的值替換成當(dāng)前的值,以便生成輸出。例如,在解析“January 32, 2007”時,有的 //瀏覽器會講其解釋為“February 1, 2007” 。而 Opera 則傾向與插入當(dāng)前月份的當(dāng)前日期 var box=new Date('January 32, 2007'); alert(box);//Thu Feb 01 2007 00:00:00 GMT+0800 (China Standard Time)
//UTC 是國際統(tǒng)一時間 我國為東八區(qū),故UTC時間加上8小時為本地時間 //Date.UTC()方法同樣也返回表示日期的毫秒數(shù), 但它與 Date.parse()在構(gòu)建值時使用不同 //的信息。 (年份, 基于 0 的月份[0 表示 1 月, 1 表示 2 月], 月中的哪一天[1-31], 小時數(shù)[0-23], //分鐘,秒以及毫秒)。只有前兩個參數(shù)是必須的。如果沒有提供月數(shù),則天數(shù)為 1;如果省 //略其他參數(shù),則統(tǒng)統(tǒng)為 0.
alert(Date.UTC(2013,12));//1388534400000 //如果輸入非法值 則會返回負數(shù)或者 NaN alert(Date.UTC('2013,13'));//NaN //同樣將返回值傳入到 Date的構(gòu)造函數(shù)中就可以輸出具體的值 alert(new Date(Date.UTC(2011,11,5,15,13,16))); //Mon Dec 05 2011 23:13:16 GMT+0800 (China Standard Time)
*/
/* 通用方法 toString()(UTC格式) toLocaleString()(本地格式) valueOf()(返回的是毫秒數(shù)) var box=new Date(Date.UTC(2011,11,5,15,13,16)); alert(box);//Mon Dec 05 2011 23:13:16 GMT+0800 (China Standard Time) alert(box.toString());//Mon Dec 05 2011 23:13:16 GMT+0800 (China Standard Time) alert(box.toLocaleString());//?2011?-?12?-?05? ?23?:?13?:?16 alert(box.valueOf());//返回的是毫秒數(shù) 1323097996000
*/
/* 序列化方法 都是按照特定的格式顯示 var box =new Date(); alert(box);//Thu Jan 02 2014 17:18:58 GMT+0800 (China Standard Time) alert(box.toDateString());//Thu Jan 02 2014 alert(box.toTimeString());//17:18:58 GMT+0800 (China Standard Time) alert(box.toLocaleDateString());//2014?-?01?-?02? alert(box.toLocaleTimeString());//17:18:30 alert(box.toUTCString());//以特定的格式顯示完整的UTC時間 Thu, 02 Jan 2014 09:21:54 GMT
*/
/* 組件方法 獲取年月日時分秒星期等等等等
var box=new Date(); alert(box.getYear());//114 獲取的是相對于1900年的年份間隔 alert(box.getTime());//1388654969210 返回的是毫秒數(shù) 和valueOf()返回的值是一樣的 alert(box.getDate());//2 alert(box.getFullYear());//2014 alert(box.getMonth());//0 // 0 代表的是一月 alert(box.getDay());//4 星期幾 alert(box.getHours());// 17 返回的是本地的小時 alert(box.getMinutes());//30 返回的是分鐘數(shù) alert(box.getSeconds());//48 返回的是秒 alert(box.getMilliseconds());//884 返回的是毫秒數(shù)
alert(box.getTimezoneOffset());// -480 返回的是本地時間和UTC時間相差的分鐘數(shù)
*/
|