Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (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);
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement