《JavaScript教程》07章 日期类型


同样,日期类型也是非常重要的数据类型,必须熟练掌握。

新建日期
date = new Date(...);
   //...部分是:“年、月、日、时、分、秒”的组合,数字和字符串皆可。
   //注:月份是0~11,而不是1~12。
   //全部缺省,则表示当前年月日时分秒
   //只有年份,则表示1970年01月01日 09:00:00
   //只有年月,则日用01表示,时分秒则用00:00:00表示
   //只有年月日,则时分秒则用00:00:00表示
dd = new Date(0,0);      //dd的结果: Mon Jan 1 00:00:00 UTC+0900 1900
dd = new Date(99,12);    //dd的结果: Thu Jan 1 09:00:02 UTC+0900 1970  (年份无效)
dd = new Date("2004",10); //dd的结果: Mon Nov 1 00:00:00 UTC+0900 2004
dd = new Date(2004,10,21);//dd的结果: Sun Nov 21 00:00:00 UTC+0900 2004
注:年份为0~99时,则年份自动加上1900,变成:1900~1999
dd = new Date(0,0);       //dd的结果: Sun Nov 21 21:16:38 UTC+0900 2004
dd = new Date(99,11);      //dd的结果: Wed Dec 1 00:00:00 UTC+0900 1999
dd = new Date(99,0);       //dd的结果: Fri Jan 1 00:00:00 UTC+0900 100
dd = new Date(9999,11);    //dd的结果: Wed Dec 1 00:00:00 UTC+0900 9999
注:时刻省略时,则用0代替,微秒也可以表示。
dd = new Date(2004,0,1,23);             //dd的结果: Thu Jan 1 23:00:00 UTC+0900 2004
dd = new Date(2004,0,1,23,59);         //dd的结果: Thu Jan 1 23:59:00 UTC+0900 2004
dd = new Date(2004,0,1,23,59,59);     //dd的结果: Thu Jan 1 23:59:59 UTC+0900 2004
dd = new Date(2004,0,1,23,59,59,999);//dd的结果: Thu Jan 1 23:59:59 UTC+0900 2004
字符串的日期格式
dd = new Date("1999/12/31 23:59:59");        //1999年11月31日 星期5 23:59:59
dd = new Date("Dec 31, 1999 23:59:59");      //同上
dd = new Date("December 31, 1999 23:59:59"); //同上
dd = new Date("1999-12-31 23:59:59");        //不正确,这与Windows控制面板中的设置有关

日期信息的取得和设置
date.getFullYear()     //取得日期的年(YYYY)
date.setFullYear(year) //
date.getYear()         //取得日期的年:1900~1999年,则返回YY,其它返回YYYY
date.setYear(year)     //
date.getMonth()        //取得日期的月(MM)
date.setMonth(mon)     //
date.getDate()         //取得日期的日(DD)
date.setDate(date)     //
date.getDay()          //取得日期的星期(WEEK)
date.getHours()        //取得日期的时(HH)
date.setHours(hour)    //
date.getMinutes()      //取得日期的分(MI)
date.setMinutes(min)   //
date.getSeconds()      //取得日期的秒(SS)
date.setSeconds(sec)   //
date.getMilliseconds() //取得日期的微秒(MS)
date.setMilliseconds(msec)  //
dd   = new Date(1985,4,19,23,59,30,999);
yyyy = date.getFullYear() 了      //结果为: 1985
yy   = date.getYear()             //结果为: 85
mm   = date.getMonth()            //结果为: 4 (五月)
dd   = date.getDate()             //结果为: 19
ww   = date.getDay()              //结果为: 0 (星期日)
hh   = date.getHours()            //结果为: 23
mi   = date.getMinutes()          //结果为: 59
ss   = date.getSeconds()          //结果为: 30
ms   = date.getMilliseconds()     //结果为: 999
dd.setFullYear(2004);             //结果为: Wed May 19 23:59:30 UTC+0900 2004

国际标准时的取得和设置
date.getUTCFullYear()          //取得日期的年(YYYY)
date.setUTCFullYear(year)
date.getUTCYear()              //取得日期的年:1900~1999年,则返回YY,其它返回YYYY
date.setUTCYear(year)
date.getUTCMonth()             //取得日期的月(MM)
date.setUTCMonth(mon)
date.getUTCDate()              //取得日期的日(DD)
date.setUTCDate(date)
date.getUTCDay()               //取得日期的星期(WEEK)
date.getUTCHours()             //取得日期的时(HH)
date.setUTCHours(hour)
date.getUTCMinutes()           //取得日期的分(MI)
date.setUTCMinutes(min)
date.getUTCSeconds()           //取得日期的秒(SS)
date.setUTCSeconds(sec)
date.getUTCMilliseconds()      //取得日期的微秒(MS)
date.setUTCMilliseconds(msec)
dd = new Date(1985,4,1,1,59,30,999);
d1 = dd.getMonth()+"月"+dd.getDate()+"日  星期"+dd.getDay()          //4月1日 星期3
t1 = dd.getHours()+":"+dd.getMinutes()+":"+dd.getSeconds()           //1:59:30
d2 = dd.getUTCMonth()+"月"+dd.getUTCDate()+"日  星期"+dd.getUTCDay() //3月30日 星期2
t2 = dd.getUTCHours()+":"+dd.getUTCMinutes()+":"+dd.getUTCSeconds()  //16:59:30

国际时差
date.getTimezoneOffset()
返回日期对象采用的时区与格林威治时间所差的分钟数。在格林威治东方的市区,该值为负,例如:中国时区(GMT+0800)返回“-480”。 注:Date 日期对象。这个对象可以储存任意一个日期,从 0001 年到 9999 年,并且可以精确到毫秒数(1/1000 秒)。 在内部,日期对象是一个整数,它是从 1970 年 1 月 1 日零时正开始计算到日期对象所指的日期的毫秒数。 如果所指日期比 1970 年早,则它是一个负数。所有日期时间,如果不指定时区,都采用“UTC”(世界时)时区, 它与“GMT”(格林威治时间)在数值上是一样的。

现在当地时间: 

日期与字符串的转换
date.toString()
  //转换为字符串,这与自动转换结果相同
  date.toLocaleString() //转换为当地格式的字任串
  date.toGMTString() //转换为GMT格式的字任串
  date.toUTCString() //转换为UTC格式的字任串
dd = new Date("1999/12/31 23:59:59");

xx = dd.toString()         //xx的值为: "Fri Dec 31 23:59:59 UTC+0900 1999"
xx = dd.toLocaleString()   //xx的值为: "1999年12月31日 23:59:59"
xx = dd.toGMTString()      //xx的值为: "Fri, 31 Dec 1999 14:59:59 UTC"
xx = dd.toUTCString()      //xx的值为: "Fri, 31 Dec 1999 14:59:59 UTC"
日期与数的转换
为了说明方便,此处将“1970年1月1日0时0分0秒(UTC)开始的微秒数”称为“绝对时间”
date.getTime()         //取得“绝对时间”
date.setTime(time)     //设置“绝对时间”
date.UTC(year,mon,day,hour,min,sec)    //取得指定日期的“绝对时间”
date.parse(string)     //转换“绝对时间”成日期
dd = new Date("1970/1/1 00:00:59");
xx = dd.getTime()             //xx的值为: -32341000
xx = dd.setTime(24*3600)      //xx的值为: "Fri Jan 2 09:00:00 UTC+0900 1970"