• JS 的Date对象


    一、获取Date对象

          在JS中我们可以通过下面一段代码获取本地时间

    var currentDate = new Date();
    alert("currentDate:" + currentDate);

          这样我们可以获取到当前时间,其输出信息如下:Sat Jul 27 2013 22:04:17 GMT+0800 (中国标准时间);

    如果不想已这种形式出现,可以转化为本地时间,使用方法toLocaleString即可,其输出信息是:2013年7月27日 下午10:07:06。

    这些都是很简单的方式,相关的一些操作在网络中也可以找的到,参考这个网站http://www.w3school.com.cn/js/jsref_obj_date.asp,可以获取更多的信息。

    在这里我想说说我之前遇到的一些问题和现象。

    JS中我们有两种方式可以创建Date对象,一个是通过数字参数new Date(yyyy,MM,dd),一个是通过字符串参数new Date('yyyy/MM/dd');其中yyyy代表的是年份,MM是月份,dd代表的是天。

          例如我们想创建2013/7/27这个日期对象,很容易想到的是我们会使用下面的两种方式中的一种去创建对象

    // 第一种方式
    var date1 = new Date(2013, 7, 27);
    // 第二种方式
    var date2 = new Date('2013/7/27');

          问题是这两者输出来的日期信息是不同的,其中一个是准确的,还有一个就是不准确的了,如下我们可以看到结果

    var date1 = new Date(2013, 7, 27);
    document.write(date1);     // 输出结果:Tue Aug 27 2013 00:00:00 GMT+0800 (中国标准时间)
    document.write("<br />");
    document.write(date1.toLocaleString());   // 输出结果:2013年8月27日 上午12:00:00
    document.write("<br />");
    
    var date2 = new Date('2013/7/27');
    document.write(date2); // 输出结果:Sat Jul 27 2013 00:00:00 GMT+0800 (中国标准时间)
    document.write("<br />"); 
    document.write(date2.toLocaleString()); // 输出结果: 2013年7月27日 上午12:00:00

          从上面的输出方式可以观察出,第一种方式创建的日期不对,比实际多一个月;而第二种方式是正确的。

    二、获取当前时间的年月日

         上面我们已经说过,我们可以直接通过new Date()获取当前日期,那我们来看看getDate(),getMonth(),getFullYear()几个函数获取到的值

    var currentDate = new Date();
    document.write("Year:" + currentDate.getFullYear() + "<br />");
    document.write("Month:" + currentDate.getMonth() + "<br />");
    document.write("Day:" + currentDate.getDate() + "<br />");
    
    /*
    *下面是输出结果:
    *Year:2013
    *Month:6
    *Day:27
    */

          发现获取的月份也是不对的,比实际的月份少了一个月,所以我就在想那么2013/1/1输出的时间可能是2012/12/1,于是我将本地的时间修改成了2013/1/1,运行程序

          发现输出的结果是:

    Year:2013
    Month:0
    Day:1

          PS:开始我还没有理解为什么这样,通过实验可以发现一个问题,即JS中对于月份的控制很有可能就是从0开始的,然后逐渐递增,那么0表示1月,11则表示12月,这样上面的一下现象就可以解释的清楚了。

    三、将日期格式2013-7-27转化为2013/7/27

          在项目开发过程中,我们的日期控件格式很有可能是yyyy-MM-dd,而转化为JS的日期,这种格式是不支持的,而只支持yyyy/MM/dd的格式,这个时候我们就需要将格式进行一下转换,用下面两行代码,能够轻松搞定

    var sendDate = "2013-7-27"; // 这个是从前台控件获取的值
    var jsSendDate = new Date(Date.parse(sendDate.replace(/-/g, "/")));

          以上几点是我在做项目的时候遇到的,起初还不是很明白为什么或出现上面几种情况,通过写这篇博文,我更加懂得了new Date(y,M,d)为什么会比实际大一个月的原因,虽然简单了点,但是我依然希望能够得到大家的支持与鼓励。

  • 相关阅读:
    bzoj3932 [CQOI2015]任务查询系统
    bzoj1901 Zju2112 Dynamic Rankings
    bzoj3524 [Poi2014]Couriers/2223 [Coci 2009]PATULJCI
    bzoj1529 [POI2005]ska Piggy banks
    bzoj1552 [Cerc2007]robotic sort
    bzoj2208 [Jsoi2010]连通数
    2016NOI冬令营day5
    A1035 Password (20)(20 分)
    1048 数字加密(20 分)
    福尔摩斯的约会
  • 原文地址:https://www.cnblogs.com/towerking/p/3220410.html
Copyright © 2020-2023  润新知