javascript日期格式化和倒數計時外掛

antzone發表於2017-04-02

本章節分享一段程式碼例項,封裝日期格式化和倒數計時等功能。

具體的程式碼這裡不做分析,有興趣的朋友可以自己分析一下,下面直接給出程式碼。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
Angela.date = { //# 日期時間
  //@s : 開始時間
  //@e : 結束時間
  //@n : 當前時間 , n 的格式為 毫秒數
  isInArea: function (s, e, n) { //# 判斷時間區域
    var start = this.parse(s),
      end = this.parse(e),
      now = parseFloat(n) || new Date()
    ;
    start = Math.min(start, end);
    end = Math.max(start, end);
    return now >= start && now <= end ? true : false;
  }
  //把 字元竄轉化為 毫秒
  //@date : 2013-03-02 1:2:2
  , parse: function (date) { //# 格式化時間
    return Date.parse(date); //.replace(/-/g, '/')
  }
  //@time , 時間 , 如 new Date('2013/11/10 0:12:12')
  //@pre , 星期的 字首,如:周 ,星期
  //@ nums ,如:一二三四五六日
  , getWeek: function (time, pre, nums) { //# 獲取星期幾
    time = typeof time == 'string' ? this.parse(time) : (time || new Date());
    pre = pre || '星期'; //周
    nums = '日一二三四五六';
    return pre + nums[time.getDay()];
  }
  //@formatType : YYYY, YY, MM
  //@ time : new Date('2013/11/12')
  //@weeks : 日一二三四五六
  , format: function (formatType, time, weeks) { //格式化輸出時間
    var pre = '0'
  
    ;
    formatType = formatType || 'YYYY-MM-DD'
    weeks = weeks || '日一二三四五六';
    time = time || new Date();
  
    //格式化時間
    return (formatType || '')
      .replace(/yyyy|YYYY/g, time.getFullYear())
      .replace(/yy|YY/g, Tydic.string.addPre(pre, time.getFullYear() % 100), 2)
      .replace(/mm|MM/g, Tydic.string.addPre(pre, time.getMonth() + 1, 2))
      .replace(/m|M/g, time.getMonth() + 1)
      .replace(/dd|DD/g, Tydic.string.addPre(pre, time.getDate(), 2))
      .replace(/d|D/g, time.getDate())
      .replace(/hh|HH/g, Tydic.string.addPre(pre, time.getHours(), 2))
      .replace(/h|H/g, time.getHours())
      .replace(/ii|II/g, Tydic.string.addPre(pre, time.getMinutes(), 2))
      .replace(/i|I/g, time.getMinutes())
      .replace(/ss|SS/g, Tydic.string.addPre(pre, time.getSeconds(), 2))
      .replace(/s|S/g, time.getSeconds())
      .replace(/w/g, time.getDay())
      .replace(/W/g, weeks[time.getDay()])
    ;
  }
  //倒數計時
  , countDown: function (opt) { //# 倒數計時
    var option = {
      nowTime: 0  //    當前時間, ,2013/02/01 18:30:30
        , endTime: 0      //截止時間 ,2013/02/01 18:30:30
        , interval: 1      //間隔回撥時間,秒
        , called: function (day, hour, second, minute) { }//每次回撥
        , finaled: function () { } //完成後回撥
    }
      , opts = {}
      , timer = null
    ;
    opts = Tydic.extend(option, opt);
  
    //當前時間
    if (!opts.nowTime) {
      opts.nowTime = (new Date()).getTime();
    } else {
      opts.nowTime = this.parse(opts.nowTime);
    }
    //當前時間
    if (!opts.endTime) {
      opts.endTime = (new Date()).getTime();
    } else {
      opts.endTime = this.parse(opts.endTime);
    }
  
    timer = setInterval(loop, opts.interval * 1e3);
    // 迴圈
    function loop() {
      var ts = opts.endTime - opts.nowTime //計算剩餘的毫秒數
        , dd = parseInt(ts / 8.64e7)  //計算剩餘的天數
        , hh = parseInt(ts / 3.6e7 % 24)//計算剩餘的小時數
        , mm = parseInt(ts / 6e4 % 60)//計算剩餘的分鐘數
        , ss = parseInt(ts / 1e3 % 60)//計算剩餘的秒數
      ;
      //當前時間遞減
      opts.nowTime += opts.interval * 1e3;
      if (ts <= 0) {
        clearInterval(timer);
        opts.finaled();
      } else {
        opts.called(dd, hh, mm, ss);
      }
    }
  }
};

相關文章