JavaScript⽇期和时间
在⽇期和时间这⼀块的学习中发现,其实和其他⼤部分的⾼级语⾔中时间和⽇期的操作差不多,没什么特别的,但是要注意的就是 ECMAScript中规定的⼀些⽅法在各⼤浏览器中的实现⽅式是不⼀样的,也就是说存在浏览器的不兼容问题,练习中主要是⽤的IE9,很少测试其他浏览器,故后⾯的练习结果都是基于IE9浏览器的结果,其他浏览器的结果可能不⼀
1、Date 类型  ECMAScript中的Date类型使⽤的是UTC(世界统⼀时间)1970年1⽉1⽇零时开始进过的毫秒来保存的时间与⽇期。
  创建⼀个Date对象和创建⼀个Object对象差不多,通过new关键字和构造函数来创建的。如果创建的时候没有传递参数,那么默认的获取的是本地的当前时间
  ECMAScript提供了两个静态⽅法 Date.parse()和Date.UTC();都是接受参数返回毫秒
  Date.parse()中接收的是表⽰⽇期的字符串,⼀般常⽤的格式都可以,年⽉⽇/⽇⽉年,如果没有给出时间就默认的是0,如'2013-01-13 12:34:24';当然也包含英⽂写法,'英⽂⽉名⽇,
日期字符串是什么年',如 May 25, 2004;.'英⽂星期⼏英⽂⽉名⽇年时:分:秒时区',如 'Tue May 25 2004 00:00:00 GMT-070';如果不满⾜上⾯的⼀些要求就会返回⼀个NaN
  Eg:alert(Date.parse('6/13/2011')); //1307894400000
  Date.UTC()⽅法同样也返回表⽰⽇期的毫秒数,但它与 Date.parse()在构建值时使⽤不同的信息。 (年份,基于 0 的⽉份[0 表⽰ 1 ⽉, 1 表⽰ 2 ⽉],⽉中的哪⼀天[1-31],⼩时数[0-23],分钟,秒以及毫秒)。只有前两个参数是必须的。如果没有提供⽉数,则天数为 1;如果省略其他参数,则统统为 0.  eg:Date.UTC(2013,11,25);传递的是有效的数值⾮字符串
  如果输⼊的参数不正确就会返回NaN或者是负数等⾮法信息 Date.UTC('2012-12');
  由于创建⽇期的时候是可以传递⼀个参数的,故需要输出指定的⽇期的时候,将上⾯两个⽅法的返回值传递给Date()的构造函数即可,new Date(Date.parse('2014/01/02'));new
Date(Date.UTC());当然对于Date.parse()可以直接传递复合个数的数值字符串给Date构造函数,因为系统会⾃动的调⽤Date.parse()函数,eg:new Date('2014-01-02');
2、通⽤的⽅法:   toString()(返回UTC格式时间),  toLocaleString()(返回本地格式),  valueOf()(返回毫秒数)
 3、⽇期格式化⽅法
  toDateString() //以特定的格式显⽰星期⼏、⽉、⽇和年 toTimeString()  //以特定的格式显⽰时分秒和时区 toLocaleDateString() //以特定本地区格式显⽰⽇期 toLocaleTimeString() //以特定的本地区格式显⽰时间和时区 toUTCString()  //以特定格式显⽰UTC⽇期toDateString() //以特定的格式显⽰星期⼏、⽉、⽇和年 toTimeString()  //以特定的格式显⽰时分秒和时区toLocaleDateString() //以特定本地区格式显⽰⽇期 toLocaleTimeString() //以特定的本地区格式显⽰时间和时区 toUTCString()  //以特定格式显⽰UTC⽇期
toDateString() //以特定的格式显⽰星期⼏、⽉、⽇和年
toTimeString()  //以特定的格式显⽰时分秒和时区
toLocaleDateString() //以特定本地区格式显⽰⽇期
toLocaleTimeString() //以特定的本地区格式显⽰时间和时区
toUTCString()  //以特定格式显⽰UTC⽇期
1 2 3 4 5toDateString() //以特定的格式显⽰星期⼏、⽉、⽇和年toTimeString()  //以特定的格式显⽰时分秒和时区toLocaleDateString() //以特定本地区格式显⽰⽇期toLocaleTimeString() //以特定的本地区格式显⽰时间和时区toUTCString()  //以特定格式显⽰UTC⽇期
4、组件⽅法(重要)   下⾯的set⽅法是设置时间变量中的某⼀部分值,get⽅法是获取值Time() //获取⽇期的毫秒数,和valueOf的返回值是⼀样的
box.setTime(100) //⼀毫秒数来设置时间,会改变整个⽇期,因为⽇期是以毫秒数保存的Year() //获取的是当前年份相对与1900的间隔时间
box.setYear(114) //以间隔时间来设置年份,
box.setFullYear(2014) //设置四位年份部分,返回的是毫秒数
box.setDate(23) //设置⽇期,返回的是毫秒数
box.setHours(12) //返回时,24⼩时制
box.setMinutes(22) //设置分钟
box.setSeconds(23) //设置秒钟
box.setMillseconds(233) //设置毫秒数
1
2
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Time() //获取⽇期的毫秒数,和valueOf的返回值是⼀样的
box.setTime(100) //⼀毫秒数来设置时间,会改变整个⽇期,因为⽇期是以毫秒数保存的Year() //获取的是当前年份相对与1900的间隔时间
box.setYear(114) //以间隔时间来设置年份,
box.setFullYear(2014) //设置四位年份部分,返回的是毫秒数
box.setMonth(11) //设置⽉份,11表⽰的是第⼗⼆⽉份
box.setDate(23) //设置⽇期,返回的是毫秒数
box.setDay(2) //设置星期⼏
box.setHours(12) //返回时,24⼩时制
box.setMinutes(22) //设置分钟
box.setSeconds(23) //设置秒钟
box.setMillseconds(233) //设置毫秒数
  注:上⾯的⽅法中除了最后⼀个⽅法 box.setTimezoneOffset()以外,其他的⽅法都具有UTC功能,以便和世界时间相协调,如:setDate()和getDate()对应的UTC⽅法是setUTCDate()和getUTCDate(
/*
//创建⼀个⽇期类的对象,通过构造⽅法,此处没有传递参数,获取的是本的时间(浏览器各异) var time=new Date();
alert(time);//Thu Jan 02 2014 15:06:46 GMT+0800 (China Standard Time)
//    Date.parse() 和 Date.UTC()    是Date类型提供的两个静态⽅法。不需要创建对象的
//Date.parse() 返回指定⽇期的毫秒数,指定⽇期有三种格式,不符合格式会返回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
//'英⽂星期⼏英⽂⽉名⽇年时:分:秒时区',如 Tue May 25 2004 00:00:00 GMT-070
alert(Date.parse('Tue May 25 2004 00:00:00 GMT-070'));//1085447400000
//如果想输出具体的⽇期和时间,可以把值传⼊ Data 的构造函数⾥⾯
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() ⽽是直接传⼊⼀个符合上⾯三种格式的⽇期,
//系统会⾃动的调⽤ Date.parse()⽅法
var box=new Date('15-01-2013');
alert(box);//Sat Mar 01 2014 00:00:00 GMT+0800 (China Standard Time)
//Date 对象及其在不同浏览器中的实现有许多奇怪的⾏为。其中有⼀种倾向是将超
//出的范围的值替换成当前的值,以便⽣成输出。例如,在解析“January 32, 2007”时,有的//浏览器会讲其解释为“February 1, 2007” 。⽽ Opera 则倾向与插⼊当前⽉份的当前⽇期
var box=new Date('January 32, 2007');
alert(box);//Thu Feb 01 2007 00:00:00 GMT+0800 (China Standard Time)
//UTC 是国际统⼀时间我国为东⼋区,故UTC时间加上8⼩时为本地时间
//Date.UTC()⽅法同样也返回表⽰⽇期的毫秒数,但它与 Date.parse()在构建值时使⽤不同
//的信息。 (年份,基于 0 的⽉份[0 表⽰ 1 ⽉, 1 表⽰ 2 ⽉],⽉中的哪⼀天[1-31],⼩时数[0-23],
//分钟,秒以及毫秒)。只有前两个参数是必须的。如果没有提供⽉数,则天数为 1;如果省
//略其他参数,则统统为 0.
alert(Date.UTC(2013,12));//1388534400000
//如果输⼊⾮法值则会返回负数或者 NaN
alert(Date.UTC('2013,13'));//NaN
//同样将返回值传⼊到 Date的构造函数中就可以输出具体的值
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()(返回的是毫秒数)
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)
String());//Mon Dec 05 2011 23:13:16 GMT+0800 (China Standard Time)
LocaleString());//?2011?-?12?-?05? ?23?:?13?:?16
alert(box.valueOf());//返回的是毫秒数  1323097996000
*/
/*    序列化⽅法都是按照特定的格式显⽰
var box =new Date();
alert(box);//Thu Jan 02 2014 17:18:58 GMT+0800 (China Standard Time)
DateString());//Thu Jan 02 2014
TimeString());//17:18:58 GMT+0800 (China Standard Time)
LocaleDateString());//2014?-?01?-?02?
LocaleTimeString());//17:18:30
UTCString());//以特定的格式显⽰完整的UTC时间  Thu, 02 Jan 2014 09:21:54 GMT
*/
/*    组件⽅法获取年⽉⽇时分秒星期等等等等
var box=new Date();
Year());//114    获取的是相对于1900年的年份间隔
Time());//1388654969210    返回的是毫秒数和valueOf()返回的值是⼀样的    Date());//2
FullYear());//2014
Month());//0    // 0 代表的是⼀⽉
Day());//4        星期⼏
Hours());// 17        返回的是本地的⼩时
Minutes());//30  返回的是分钟数
Seconds());//48    返回的是秒
Milliseconds());//884    返回的是毫秒数
TimezoneOffset());// -480    返回的是本地时间和UTC时间相差的分钟数
*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。