Date

嗯嗯,今天复习一下js中原生的Date对象~不不。。是预习。。。

翻了一下MDN,没错Date对象有一大坨方法,先不管那么多,先来了解一下构造方法:

四种用法:

  • new Date(): 默认是当前时间

  • new Date(value):value是时间戳

  • new Date(dateString):这个dateString比较多,不太好记忆,用到的时候试试就好啦,该字符串必须能被Date.parse()识别才行哦,不过文档上是不推荐在ES5之前使用的,因为哥浏览器实现差异大, 手动解析会更好一些。

  • new Date(year, month, day, hour, minutes, secondes, milliseconds)

Date拥有的方法众多,我觉得很有用的是几个get方法:

年:getFullYear()

月:getMoth() + 1 注意它从0开始的

日:getDate() 注意不是getDay, getDay返回的是星期中的第几天(0-6)

时:getHours()

分:getMinutes()

秒:getSeconds()

在处理日期的时候常常有format的需求,调研了一下moment.js感觉大而全,貌似简单的需求可以简单处理下,例如如下简单的扩展了Date类的方法:

Date.prototype.format = function(fmt) {
  var times = {
    "M": this.getMonth() + 1,
    "d": this.getDate(),
    "h": this.getHours(),
    "m": this.getMinutes(),
    "s": this.getSeconds()
  };
  
  var yearStr = this.getFullYear() + "";
  fmt = fmt.replace(/(y+)/, function(match) {
     return yearStr.slice(4 - match.length);
  });
  
  for(var key in times) {
    var value = times[key] + "";
    fmt = fmt.replace(new RegExp('('+ key +'+)'), function(match) {
      if(match.length === 1) {
        return value;
      } else {
        return value.length === 1 ? '0' + value : value;
      }
    });
  }
  return fmt;
};

console.log((new Date()).format("yyyy-MM-dd hh:mm:ss"));
console.log((new Date()).format("yy-M-d hh:mm:ss"));

原理也很清晰,主要是运用了正则表达式:年:(y+)\; 月:(M+)\;日:(d+)\;时:(h+)\;分:(m+)\;秒:(s+)\;和replace方法,对格式化的字符串进行了日期替换而得到相应格式的日期。