• 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
  • 相关阅读:
    ssh登陆报错“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”的解决方法
    python错误:SyntaxError: invalid character in identifier
    Python3中出现UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128)的解决方法
    Jmeter在Mac下安装教程
    TensorFlow | win10下使用docker安装tensorflow
    Docker | 删除 image 失败的一种情况
    基础技能 | Git
    Leetcode-探索 | 两数之和
    Leetcode-探索 | 移动零
    基础复习-算法设计基础 | 复杂度计算
  • 原文地址:https://www.cnblogs.com/qigang/p/3503142.html
Copyright © 2020-2023  润新知