javaScript中的Date

1,077 阅读3分钟

创建 Date 实例用来处理日期和时间。Date 对象基于1970年1月1日(世界标准时间)起的毫秒数。

构造函数

接受7个可选参数,Date.length 的值是 7。这是该构造函数可接受的参数个数。

    new Date();
    new Date(value);
    new Date(dateString);
    new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

有哪些标准定义时间

  • GMT 格林尼治标准时间
  • UTC 国际标准时间

GMT与UTC 的区别

格林尼治标准时间(GMT,旧译“格林威治平均时间”或“格林威治标准时间”)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。 理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。 地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。现在的标准时间——协调世界时(UTC)——由原子钟提供。

ISO-8601

UTC 是时间标准;ISO-8601是表示时间的一种标准格式,多数编程语言都支持。

2016-01-18T23:41:00 是符合 ISO-8601 标准的时间表示。

2016-01-18T23:41:00 里面的 T 表示 UTC,所以这个字符串解析后就表示 UTC 时间的 2016-01-18 23:41:00,那么再转换为北京当地时间展示(比如,在 JavaScript 里面 new Date('2016-01-18T23:41:00').toLocaleString())时就会加上 8 小时的偏移,变成:2016-01-19 7:41:00。

日期对象转换字符串

    // GMT+0800 表示是“东八区”,CST 表示是“中国标准时间(China Standard Time)
    new Date() 
    Thu Mar 01 2018 17:51:36 GMT+0800 (CST)
    
    new Date().toUTCString() 
    "Thu, 01 Mar 2018 12:04:01 GMT"
    
    new Date().toGMTString() 
    "Thu, 01 Mar 2018 09:12:46 GMT"
    
    new Date().toISOString() // T代表UTC标准,转换北京时间+8小时
    "2018-03-01T09:13:21.674Z"
    
    new Date().toTimeString() 
    "17:13:50 GMT+0800 (CST)"
    
    new Date().toJSON()
    "2018-03-01T09:11:40.129Z"
    
    new Date().valueOf()
    1519895727502
    
    new Date().getTime()
    1519895738005
    
    new Date().toDateString()
    "Thu Mar 01 2018"
    
    new Date().toLocaleDateString() 
    "2018/3/1"

计算两个日期对象的时间差

    // 使用 Date 对象
    var start = Date.now();
    // 这里进行耗时的方法调用: 
    doSomethingForALongTime();
    var end = Date.now();
    var elapsed = end - start; // 运行时间的毫秒值
    
    // 使用内建的创建方法
    var start = new Date();

    // 这里进行耗时的方法调用: 
    doSomethingForALongTime();
    var end = new Date();
    var elapsed = end.getTime() - start.getTime(); // 运行时间的毫秒值

日期的加减

    function addDate(date,days){ 
        var d=new Date(date); 
        d.setDate(d.getDate()+days); 
        var m=d.getMonth()+1; 
        return d.getFullYear()+'-'+m+'-'+d.getDate(); 
    } 

其中,date参数是要进行加减的日期,days参数是要加减的天数,如果往前算就传入负数,往后算就传入正数,如果是要进行月份的加减,就调用setMonth()和getMonth()就可以了,需要注意的是返回的月份是从0开始计算的,也就是说返回的月份要比实际月份少一个月,因此要相应的加上1,类似时分秒加减 setHours(),setMinutes(),setSeconds()。

参考资料