zoukankan      html  css  js  c++  java
  • JS 学习笔记--6---日期和时间

        在日期和时间这一块的学习中发现,其实和其他大部分的高级语言中时间和日期的操作差不多,没什么特别的,但是要注意的就是 ECMAScript中规定的一些方法在各大浏览器中的实现方式是不一样的,也就是说存在浏览器的不兼容问题练习中主要是用的IE10,很少测试其他浏览器,故后面的练习结果都是基于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日期
    


    4、组件方法(重要)   下面的set方法是设置时间变量中的某一部分值,get方法是获取值

        box.getTime() //获取日期的毫秒数,和valueOf的返回值是一样的
        box.setTime(100) //一毫秒数来设置时间,会改变整个日期,因为日期是以毫秒数保存的
        box.getYear() //获取的是当前年份相对与1900的间隔时间
        box.setYear(114) //以间隔时间来设置年份,
        box.getFullYear() //获取日期中的四位年份部分,返回的是当前年如:2014
        box.setFullYear(2014) //设置四位年份部分,返回的是毫秒数
        box.getMonth() //获取月份,如果没有指定月份,则从0开始算起(0表示一月份)
        box.setMonth(11) //设置月份,11表示的是第十二月份
        box.getDate() //获取的是当前的日期
        box.setDate(23) //设置日期,返回的是毫秒数
        box.getDay() //获取的是当前时间中的星期几,0表示星期1,6表示星期6
        box.setDay(2) //设置星期几
        box.getHours() //获取当前日期中的时间部分
        box.setHours(12) //返回时,24小时制
        box.getMinutes() //获取当前日期中的分钟部分
        box.setMinutes(22) //设置分钟
        box.getSeconds()  //获取秒钟
        box.setSeconds(23) //设置秒钟
        box.getMillseconds() //获取毫秒数
        box.setMillseconds(233) //设置毫秒数
        box.getTimezoneOffset() //返回本地时间和UTC时间相差的分钟
    

      注:上面的方法中除了最后一个方法 box.setTimezoneOffset()以外,其他的方法都具有UTC功能,以便和世界时间相协调,如:setDate()和getDate()对应的UTC方法是setUTCDate()和getUTCDate()

    练习代码:

      1 /*
      2 
      3 //创建一个日期类的对象,通过构造方法,此处没有传递参数,获取的是本的时间(浏览器各异)
      4 var time=new Date();
      5 alert(time);//Thu Jan 02 2014 15:06:46 GMT+0800 (China Standard Time)
      6 
      7 //    Date.parse() 和 Date.UTC()    是Date类型提供的两个静态方法。不需要创建对象的
      8 //Date.parse() 返回指定日期的毫秒数,指定日期有三种格式,不符合格式会返回NaN
      9 //  字符串括起来的日月年    '4/3/2013';
     10     var box=Date.parse('15/01/2013');
     11     alert(box);//1393603200000    
     12     var age=Date.parse('15-01-2013');
     13     alert(age);//1393603200000
     14     var time=Date.parse('2013-01-15');
     15     alert(time);//1358208000000
     16     alert(Date.parse('2013-15-01'));//NaN
     17 
     18 //'英文月 日,年'
     19     var time=Date.parse('May 25,2013');
     20     alert(time);//1369411200000
     21     time=Date.parse('May,25,2013');
     22     alert(time);//1369411200000
     23     var ti=Date.parse('25,May,2013');
     24     alert(ti);//1369411200000
     25     var t=Date.parse('2013,May,25');
     26     alert(t);//1369411200000
     27     var box=Date.parse('2013,25,May');
     28     alert(box);//1369411200000
     29     var age=Date.parse('2013-May-25');
     30     alert(age);//NaN
     31 
     32 //'英文星期几 英文月名 日 年 时:分:秒 时区', 如 Tue May 25 2004 00:00:00 GMT-070
     33     alert(Date.parse('Tue May 25 2004 00:00:00 GMT-070'));//1085447400000
     34 
     35 
     36 //如果想输出具体的日期和时间,可以把值传入 Data 的构造函数里面
     37     var box=new Date(Date.parse('15-01-2013'));
     38     alert(box);//Sat Mar 01 2014 00:00:00 GMT+0800 (China Standard Time)
     39 
     40     //可以不用写 Date.parse() 而是直接传入一个符合上面三种格式的日期,
     41     //系统会自动的调用 Date.parse()方法
     42     var box=new Date('15-01-2013');
     43     alert(box);//Sat Mar 01 2014 00:00:00 GMT+0800 (China Standard Time)
     44 
     45 //Date 对象及其在不同浏览器中的实现有许多奇怪的行为。其中有一种倾向是将超
     46 //出的范围的值替换成当前的值,以便生成输出。例如,在解析“January 32, 2007”时,有的
     47 //浏览器会讲其解释为“February 1, 2007” 。而 Opera 则倾向与插入当前月份的当前日期
     48     var box=new Date('January 32, 2007');
     49     alert(box);//Thu Feb 01 2007 00:00:00 GMT+0800 (China Standard Time)
     50 
     51 //UTC 是国际统一时间  我国为东八区,故UTC时间加上8小时为本地时间
     52 //Date.UTC()方法同样也返回表示日期的毫秒数, 但它与 Date.parse()在构建值时使用不同
     53 //的信息。 (年份, 基于 0 的月份[0 表示 1 月, 1 表示 2 月], 月中的哪一天[1-31], 小时数[0-23],
     54 //分钟,秒以及毫秒)。只有前两个参数是必须的。如果没有提供月数,则天数为 1;如果省
     55 //略其他参数,则统统为 0.
     56 
     57     alert(Date.UTC(2013,12));//1388534400000
     58 //如果输入非法值 则会返回负数或者 NaN
     59     alert(Date.UTC('2013,13'));//NaN
     60 //同样将返回值传入到 Date的构造函数中就可以输出具体的值
     61     alert(new Date(Date.UTC(2011,11,5,15,13,16)));
     62     //Mon Dec 05 2011 23:13:16 GMT+0800 (China Standard Time)
     63 
     64 */
     65 
     66 /*    通用方法  toString()(UTC格式) toLocaleString()(本地格式)    valueOf()(返回的是毫秒数)
     67     var box=new Date(Date.UTC(2011,11,5,15,13,16));
     68     alert(box);//Mon Dec 05 2011 23:13:16 GMT+0800 (China Standard Time)
     69     alert(box.toString());//Mon Dec 05 2011 23:13:16 GMT+0800 (China Standard Time)
     70     alert(box.toLocaleString());//‎2011‎-‎12‎-‎05‎ ‎23‎:‎13‎:‎16
     71     alert(box.valueOf());//返回的是毫秒数   1323097996000
     72 
     73 */
     74 
     75 /*    序列化方法        都是按照特定的格式显示
     76     var box =new Date();
     77     alert(box);//Thu Jan 02 2014 17:18:58 GMT+0800 (China Standard Time)
     78     alert(box.toDateString());//Thu Jan 02 2014
     79     alert(box.toTimeString());//17:18:58 GMT+0800 (China Standard Time)
     80     alert(box.toLocaleDateString());//2014‎-‎01‎-‎02‎ 
     81     alert(box.toLocaleTimeString());//17:18:30
     82     alert(box.toUTCString());//以特定的格式显示完整的UTC时间  Thu, 02 Jan 2014 09:21:54 GMT
     83 
     84 */
     85 
     86 
     87 /*    组件方法    获取年月日时分秒星期等等等等
     88 
     89     var box=new Date();
     90     alert(box.getYear());//114    获取的是相对于1900年的年份间隔
     91     alert(box.getTime());//1388654969210    返回的是毫秒数  和valueOf()返回的值是一样的
     92     alert(box.getDate());//2
     93     alert(box.getFullYear());//2014
     94     alert(box.getMonth());//0    // 0 代表的是一月
     95     alert(box.getDay());//4        星期几
     96     alert(box.getHours());// 17        返回的是本地的小时
     97     alert(box.getMinutes());//30  返回的是分钟数
     98     alert(box.getSeconds());//48    返回的是秒
     99     alert(box.getMilliseconds());//884    返回的是毫秒数
    100 
    101     alert(box.getTimezoneOffset());// -480    返回的是本地时间和UTC时间相差的分钟数
    102 
    103 
    104 */
    View Code
  • 相关阅读:
    poj 1088 滑雪
    位运算与bitset
    hdu 4607 Park Visit
    树的直径
    codeforces 495D Sonya and Matrix
    German Collegiate Programming Contest 2015(第三场)
    BAPC 2014 Preliminary(第一场)
    Benelux Algorithm Programming Contest 2014 Final(第二场)
    E. Reachability from the Capital(tarjan+dfs)
    poj2104 K-th Number(划分树)
  • 原文地址:https://www.cnblogs.com/qigang/p/3503142.html
Copyright © 2011-2022 走看看