aaaaaa123456789 icon

Countdown JS code for Acid Forums

aaaaaa123456789 | PRO | 02/12/16 03:59:28 AM UTC | 0 ⭐ | 475 👁️ | Never ⏰ | []
JavaScript |

2.66 KB

|

None

|

0 👍

/

0 👎

(function () {
  var server_time = 1234567890123; // set to server time via PHP or something
  var offset = (new Date()).valueOf() - server_time;
  
  var zeropad = function (number, len) {
    return ('0'.repeat(len) + number.toString()).substr(-len);
  }
  
  var countdown_text = function (limit, mode) {
    // mode: -1: count only down, 0: down and up (with sign), 1: only up
    limit += offset;
    var current = (new Date()).valueOf();
    var difference = Math.floor((current - limit) / 1000);
    if (((difference < 0) && (mode > 0)) || ((difference > 0) && (mode < 0))) return ':00';
    var sign = '';
    if (difference < 0) {
      if (mode == 0) sign = '-';
      difference = -difference;
    }
    var result = ':' + zeropad(difference % 60, 2);
    difference = Math.floor(difference / 60);
    if (difference < 60) {
      if (difference > 0) result = difference.toString() + result;
    } else {
      result = zeropad(difference % 60, 2) + result;
      difference = Math.floor(difference / 60);
      if (difference < 24)
        result = difference.toString() + ':' + result;
      else {
        result = ' ' + zeropad(difference % 24, 2) + ':' + result;
        difference = Math.floor(difference / 24);
        if (difference == 1)
          result = '1 day,' + result;
        else
          result = difference.toString() + ' days' + result;
      }
    }
    return sign + result;
  }
  
  var calculate_limit = function (limit_string) {
    if (limit_string.length == 0) return undefined;
    var mode = -1;
    if (limit_string.charAt(0) == '+')
      mode = 1;
    else if (limit_string.charAt(0) == '-')
      mode = 0;
    var components = limit_string.split(/[^0-9]+/).filter(function (str) {return str.length;}).slice(0, 7).map(parseFloat);
    if (components.length == 0) return undefined;
    var date = new Date(0);
    for (var index = 0; index < components.length; index ++) {
      if (index == 1) components[index] --;
      date[(['setUTCFullYear', 'setUTCMonth', 'setUTCDate', 'setUTCHours', 'setUTCMinutes', 'setUTCSeconds', 'setUTCMilliseconds'])[index]](components[index]);
    }
    var limit = date.valueOf();
    if (isNaN(limit)) return undefined;
    return {limit: limit, mode: mode};
  }
  
  var update_count = function (element) {
    if (!element.hasAttribute('data-limit')) return;
    var limit = calculate_limit(element.attributes['data-limit'].value);
    if (limit == undefined) return;
    element.innerHTML = countdown_text(limit.limit, limit.mode);
  }
   
  setInterval(function () {Array.prototype.forEach.call(document.querySelectorAll('span.xx-countdown'), update_count);}, 165);
})();

Comments