//
// Version 0.4.0
-(function(undefined){
+(function (undefined) {
// Establish the root object, "window" in the browser, or "global" on the server.
- var root = this;
-
- // assign variables here so they can be overwritten for i18n or customization
- var self = this, _date,
+ var root = this,
+ _date,
wordsMonths = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
wordsMonthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
wordsWeekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
y: "a year",
yy: "%d years"
},
- createOrdinal = function(number) {
+ createOrdinal = function (number) {
var b = number % 10;
return (~~ (number % 100 / 10) === 1) ? 'th' :
(b === 1) ? 'st' :
}
// helper function for _.addTime and _.subtractTime
- function dateAddRemove(_this, input, adding){
+ function dateAddRemove(_this, input, adding) {
var self = _this.date,
ms = (input.ms || 0) +
(input.s || 0) * 1e3 + // 1000
// array = new Date(array)
// number = new Date(number)
// string = new Date(string)
- function makeInputDate(input){
+ function makeInputDate(input) {
return input === undefined ? new Date() :
- input instanceof _Date ? input.date :
+ input.date instanceof Date ? input.date :
input instanceof Date ? input :
isArray(input) ? dateFromArray(input) :
new Date(input);
// date = date.gettime()
// array = new Date(array).getTime()
// string = new Date(string).getTime()
- function makeInputMilliseconds(input){
+ function makeInputMilliseconds(input) {
return isNaN(input) ? makeInputDate(input).getTime() : input;
}
substituteTimeAgo('yy', ~~ years);
}
- // _Date prototype object
- function _Date(input) {
+ // UnderscoreDate prototype object
+ function UnderscoreDate(input) {
this.date = makeInputDate(input);
return this;
}
- var _DateProto = _Date.prototype = {
+ UnderscoreDate.prototype = {
- format : function(inputString) {
+ format : function (inputString) {
// shortcuts to this and getting time functions
// done to save bytes in minification
var date = this.date,
var a, b;
switch (input) {
// MONTH
- case 'M' :
- return currentMonth + 1;
- case 'Mo' :
- return (currentMonth + 1) + createOrdinal(currentMonth + 1);
- case 'MM' :
- return leftZeroFill(currentMonth + 1, 2);
- case 'MMM' :
- return wordsMonthsShort[currentMonth];
- case 'MMMM' :
- return wordsMonths[currentMonth];
- // DAY OF MONTH
- case 'D' :
- return currentDate;
- case 'Do' :
- return currentDate + createOrdinal(currentDate);
- case 'DD' :
- return leftZeroFill(currentDate, 2);
- // DAY OF YEAR
- case 'DDD' :
- a = new Date(currentYear, currentMonth, currentDate);
- b = new Date(currentYear, 0, 1);
- return ~~ (((a - b) / 864e5) + 1.5);
- case 'DDDo' :
- a = replaceFunction('DDD');
- return a + createOrdinal(a);
- case 'DDDD' :
- return leftZeroFill(replaceFunction('DDD'), 3);
- // WEEKDAY
- case 'd' :
- return currentDay;
- case 'do' :
- return currentDay + createOrdinal(currentDay);
- case 'ddd' :
- return wordsWeekdaysShort[currentDay];
- case 'dddd' :
- return wordsWeekdays[currentDay];
- // WEEK OF YEAR
- case 'w' :
- a = new Date(currentYear, currentMonth, currentDate - currentDay + 5);
- b = new Date(a.getFullYear(), 0, 4);
- return ~~ ((a - b) / 864e5 / 7 + 1.5);
- case 'wo' :
- a = replaceFunction('w');
- return a + createOrdinal(a);
- case 'ww' :
- return leftZeroFill(replaceFunction('w'), 2);
- // YEAR
- case 'YY' :
- return (currentYear + '').slice(-2);
- case 'YYYY' :
- return currentYear;
- // AM / PM
- case 'a' :
- return currentHours > 11 ? 'pm' : 'am';
- case 'A' :
- return currentHours > 11 ? 'PM' : 'AM';
- // 24 HOUR
- case 'H' :
- return currentHours;
- case 'HH' :
- return leftZeroFill(currentHours, 2);
- // 12 HOUR
- case 'h' :
- return currentHours % 12 || 12;
- case 'hh' :
- return leftZeroFill(currentHours % 12 || 12, 2);
- // MINUTE
- case 'm' :
- return currentMinutes;
- case 'mm' :
- return leftZeroFill(currentMinutes, 2);
- // SECOND
- case 's' :
- return currentSeconds;
- case 'ss' :
- return leftZeroFill(currentSeconds, 2);
- // TIMEZONE
- case 'z' :
- return replaceFunction('zz').replace(nonuppercaseLetters, '');
- case 'zz' :
- a = currentString.indexOf('(');
- if (a > -1) {
- return currentString.slice(a + 1, currentString.indexOf(')'));
- }
- return currentString.slice(currentString.indexOf(':')).replace(nonuppercaseLetters, '');
- // DEFAULT
- default :
- return input.replace("\\", "");
+ case 'M' :
+ return currentMonth + 1;
+ case 'Mo' :
+ return (currentMonth + 1) + createOrdinal(currentMonth + 1);
+ case 'MM' :
+ return leftZeroFill(currentMonth + 1, 2);
+ case 'MMM' :
+ return wordsMonthsShort[currentMonth];
+ case 'MMMM' :
+ return wordsMonths[currentMonth];
+ // DAY OF MONTH
+ case 'D' :
+ return currentDate;
+ case 'Do' :
+ return currentDate + createOrdinal(currentDate);
+ case 'DD' :
+ return leftZeroFill(currentDate, 2);
+ // DAY OF YEAR
+ case 'DDD' :
+ a = new Date(currentYear, currentMonth, currentDate);
+ b = new Date(currentYear, 0, 1);
+ return ~~ (((a - b) / 864e5) + 1.5);
+ case 'DDDo' :
+ a = replaceFunction('DDD');
+ return a + createOrdinal(a);
+ case 'DDDD' :
+ return leftZeroFill(replaceFunction('DDD'), 3);
+ // WEEKDAY
+ case 'd' :
+ return currentDay;
+ case 'do' :
+ return currentDay + createOrdinal(currentDay);
+ case 'ddd' :
+ return wordsWeekdaysShort[currentDay];
+ case 'dddd' :
+ return wordsWeekdays[currentDay];
+ // WEEK OF YEAR
+ case 'w' :
+ a = new Date(currentYear, currentMonth, currentDate - currentDay + 5);
+ b = new Date(a.getFullYear(), 0, 4);
+ return ~~ ((a - b) / 864e5 / 7 + 1.5);
+ case 'wo' :
+ a = replaceFunction('w');
+ return a + createOrdinal(a);
+ case 'ww' :
+ return leftZeroFill(replaceFunction('w'), 2);
+ // YEAR
+ case 'YY' :
+ return (currentYear + '').slice(-2);
+ case 'YYYY' :
+ return currentYear;
+ // AM / PM
+ case 'a' :
+ return currentHours > 11 ? 'pm' : 'am';
+ case 'A' :
+ return currentHours > 11 ? 'PM' : 'AM';
+ // 24 HOUR
+ case 'H' :
+ return currentHours;
+ case 'HH' :
+ return leftZeroFill(currentHours, 2);
+ // 12 HOUR
+ case 'h' :
+ return currentHours % 12 || 12;
+ case 'hh' :
+ return leftZeroFill(currentHours % 12 || 12, 2);
+ // MINUTE
+ case 'm' :
+ return currentMinutes;
+ case 'mm' :
+ return leftZeroFill(currentMinutes, 2);
+ // SECOND
+ case 's' :
+ return currentSeconds;
+ case 'ss' :
+ return leftZeroFill(currentSeconds, 2);
+ // TIMEZONE
+ case 'z' :
+ return replaceFunction('zz').replace(nonuppercaseLetters, '');
+ case 'zz' :
+ a = currentString.indexOf('(');
+ if (a > -1) {
+ return currentString.slice(a + 1, currentString.indexOf(')'));
+ }
+ return currentString.slice(currentString.indexOf(':')).replace(nonuppercaseLetters, '');
+ // DEFAULT
+ default :
+ return input.replace("\\", "");
}
}
return inputString.replace(charactersToReplace, replaceFunction);
},
- add : function(input) {
+ add : function (input) {
return dateAddRemove(this, input, 1);
},
- subtract : function(input) {
+ subtract : function (input) {
return dateAddRemove(this, input, -1);
},
- customize : function(input) {
+ customize : function (input) {
var inputOrdinal = input.ordinal,
- inputRelativeTime = input.relativeTime;
+ inputRelativeTime = input.relativeTime,
+ key;
if (input.weekdays) {
wordsWeekdays = input.weekdays;
}
wordsMonthsShort = input.monthsShort;
}
if (inputRelativeTime) {
- for (var key in inputRelativeTime) {
+ for (key in inputRelativeTime) {
if (inputRelativeTime.hasOwnProperty(key)) {
wordsTimeAgo[key] = inputRelativeTime[key];
}
createOrdinal = inputOrdinal;
}
},
- from : function(time, withoutSuffix, asMilliseconds) {
+ from : function (time, withoutSuffix, asMilliseconds) {
var difference = msApart(this.date, time),
string = difference < 0 ? wordsTimeAgo.past : wordsTimeAgo.future;
return asMilliseconds ? difference :
withoutSuffix ? relativeTime(difference) :
string.replace(/%s/i, relativeTime(difference));
},
- fromNow : function(withoutSuffix, asMilliseconds) {
+ fromNow : function (withoutSuffix, asMilliseconds) {
return this.from(_date.now(), withoutSuffix, asMilliseconds);
},
- isLeapYear : function() {
+ isLeapYear : function () {
return _date.isLeapYear(this.date.getFullYear());
}
};
// function to convert string input to date
function addTime(format, input) {
switch (format) {
- // MONTH
- case 'M' :
- // fall through to MM
- case 'MM' :
- array[1] = ~~input - 1;
- break;
- // DAY OF MONTH
- case 'D' :
- // fall through to DDDD
- case 'DD' :
- // fall through to DDDD
- case 'DDD' :
- // fall through to DDDD
- case 'DDDD' :
- array[2] = ~~input;
- break;
- // YEAR
- case 'YY' :
- input = ~~input;
- array[0] = input + (input > 70 ? 1900 : 2000);
- break;
- case 'YYYY' :
- array[0] = ~~input;
- break;
- // AM / PM
- case 'a' :
- // fall through to A
- case 'A' :
- isPm = (input.toLowerCase() === 'pm');
- break;
- // 24 HOUR
- case 'H' :
- // fall through to hh
- case 'HH' :
- // fall through to hh
- case 'h' :
- // fall through to hh
- case 'hh' :
- array[3] = ~~input;
- break;
- // MINUTE
- case 'm' :
- // fall through to mm
- case 'mm' :
- array[4] = ~~input;
- break;
- // SECOND
- case 's' :
- // fall through to ss
- case 'ss' :
- array[5] = ~~input;
- break;
+ // MONTH
+ case 'M' :
+ // fall through to MM
+ case 'MM' :
+ array[1] = ~~input - 1;
+ break;
+ // DAY OF MONTH
+ case 'D' :
+ // fall through to DDDD
+ case 'DD' :
+ // fall through to DDDD
+ case 'DDD' :
+ // fall through to DDDD
+ case 'DDDD' :
+ array[2] = ~~input;
+ break;
+ // YEAR
+ case 'YY' :
+ input = ~~input;
+ array[0] = input + (input > 70 ? 1900 : 2000);
+ break;
+ case 'YYYY' :
+ array[0] = ~~input;
+ break;
+ // AM / PM
+ case 'a' :
+ // fall through to A
+ case 'A' :
+ isPm = (input.toLowerCase() === 'pm');
+ break;
+ // 24 HOUR
+ case 'H' :
+ // fall through to hh
+ case 'HH' :
+ // fall through to hh
+ case 'h' :
+ // fall through to hh
+ case 'hh' :
+ array[3] = ~~input;
+ break;
+ // MINUTE
+ case 'm' :
+ // fall through to mm
+ case 'mm' :
+ array[4] = ~~input;
+ break;
+ // SECOND
+ case 's' :
+ // fall through to ss
+ case 'ss' :
+ array[5] = ~~input;
+ break;
}
}
// add input parts to array
- string.replace(charactersToPutInArray, function(input) {
+ string.replace(charactersToPutInArray, function (input) {
inputParts.push(input);
});
// add format parts to array
- format.replace(charactersToPutInArray, function(input) {
+ format.replace(charactersToPutInArray, function (input) {
formatParts.push(input);
});
array[3] += 12;
}
- return new _Date(array);
+ return new UnderscoreDate(array);
}
_date = {
- date : function(input, format) {
- return format ? makeDateFromStringAndFormat(input, format) : new _Date(input);
+ date : function (input, format) {
+ return format ? makeDateFromStringAndFormat(input, format) : new UnderscoreDate(input);
},
- now : function(asTimestamp) {
+ now : function (asTimestamp) {
return asTimestamp ? new Date().getTime() : _date.date();
},
- isLeapYear : function(year) {
+ isLeapYear : function (year) {
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
}
};
-(function(a){function v(a,b){function i(a,b){switch(a){case"M":case"MM":c[1]=~~b-1;break;case"D":case"DD":case"DDD":case"DDDD":c[2]=~~b;break;case"YY":b=~~b,c[0]=b+(b>70?1900:2e3);break;case"YYYY":c[0]=~~b;break;case"a":case"A":h=b.toLowerCase()==="pm";break;case"H":case"HH":case"h":case"hh":c[3]=~~b;break;case"m":case"mm":c[4]=~~b;break;case"s":case"ss":c[5]=~~b}}var c=[0],d=/[0-9a-zA-Z]+/g,e=[],f=[],g,h;a.replace(d,function(a){e.push(a)}),b.replace(d,function(a){f.push(a)});for(g=0;g<f.length;g++)i(f[g],e[g]);h&&c[3]<12&&(c[3]+=12);return new t(c)}function t(a){this.date=o(a);return this}function s(a){var b=Math.abs(a)/1e3,c=b/60,d=c/60,e=d/24,f=e/365;return b<45&&q("s",~~b)||b<90&&q("m")||c<45&&q("mm",~~c)||c<90&&q("h")||d<24&&q("hh",~~d)||d<48&&q("d")||e<25&&q("dd",~~e)||e<45&&q("M")||e<350&&q("MM",~~((e+15)/30))||f<2&&q("y")||q("yy",~~f)}function r(a,b){return p(a)-p(b)}function q(a,b){return i[a].replace(/%d/i,b||1)}function p(a){return isNaN(a)?o(a).getTime():a}function o(b){return b===a?new Date:b instanceof t?b.date:b instanceof Date?b:n(b)?m(b):new Date(b)}function n(a){return Object.prototype.toString.call(a)==="[object Array]"}function m(a){return new Date(a[0],a[1]||0,a[2]||1,a[3]||0,a[4]||0,a[5]||0,a[6]||0)}function l(a,b,c){var d=a.date,e=(b.ms||0)+(b.s||0)*1e3+(b.m||0)*6e4+(b.h||0)*36e5+(b.d||0)*864e5+(b.w||0)*6048e5,f=(b.M||0)+(b.y||0)*12,g;e&&d.setMilliseconds(d.getMilliseconds()+e*c),f&&(g=d.getDate(),d.setDate(1),d.setMonth(d.getMonth()+f*c),d.setDate(Math.min((new Date(d.getFullYear(),d.getMonth()+1,0)).getDate(),g)));return a}function k(a,b){var c=a+"";while(c.length<b)c="0"+c;return c}var b=this,c=this,d,e=["January","February","March","April","May","June","July","August","September","October","November","December"],f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],g=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],i={future:"in %s",past:"%s ago",s:"seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},j=function(a){var b=a%10;return~~(a%100/10)===1?"th":b===1?"st":b===2?"nd":b===3?"rd":"th"},u=t.prototype={format:function(a){function s(a){var b,q;switch(a){case"M":return c+1;case"Mo":return c+1+j(c+1);case"MM":return k(c+1,2);case"MMM":return f[c];case"MMMM":return e[c];case"D":return d;case"Do":return d+j(d);case"DD":return k(d,2);case"DDD":b=new Date(i,c,d),q=new Date(i,0,1);return~~((b-q)/864e5+1.5);case"DDDo":b=s("DDD");return b+j(b);case"DDDD":return k(s("DDD"),3);case"d":return l;case"do":return l+j(l);case"ddd":return h[l];case"dddd":return g[l];case"w":b=new Date(i,c,d-l+5),q=new Date(b.getFullYear(),0,4);return~~((b-q)/864e5/7+1.5);case"wo":b=s("w");return b+j(b);case"ww":return k(s("w"),2);case"YY":return(i+"").slice(-2);case"YYYY":return i;case"a":return m>11?"pm":"am";case"A":return m>11?"PM":"AM";case"H":return m;case"HH":return k(m,2);case"h":return m%12||12;case"hh":return k(m%12||12,2);case"m":return n;case"mm":return k(n,2);case"s":return o;case"ss":return k(o,2);case"z":return s("zz").replace(r,"");case"zz":b=p.indexOf("(");if(b>-1)return p.slice(b+1,p.indexOf(")"));return p.slice(p.indexOf(":")).replace(r,"");default:return a.replace("\\","")}}var b=this.date,c=b.getMonth(),d=b.getDate(),i=b.getFullYear(),l=b.getDay(),m=b.getHours(),n=b.getMinutes(),o=b.getSeconds(),p=b.toString(),q=/(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|dddd?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|zz?)/g,r=/[^A-Z]/g;return a.replace(q,s)},add:function(a){return l(this,a,1)},subtract:function(a){return l(this,a,-1)},customize:function(a){var b=a.ordinal,c=a.relativeTime;a.weekdays&&(g=a.weekdays),a.weekdaysShort&&(h=a.weekdaysShort),a.months&&(e=a.months),a.monthsShort&&(f=a.monthsShort);if(c)for(var d in c)c.hasOwnProperty(d)&&(i[d]=c[d]);b&&b instanceof Function&&(j=b)},from:function(a,b,c){var d=r(this.date,a),e=d<0?i.past:i.future;return c?d:b?s(d):e.replace(/%s/i,s(d))},fromNow:function(a,b){return this.from(d.now(),a,b)},isLeapYear:function(){return d.isLeapYear(this.date.getFullYear())}};d={date:function(a,b){return b?v(a,b):new t(a)},now:function(a){return a?(new Date).getTime():d.date()},isLeapYear:function(a){return a%4===0&&a%100!==0||a%400===0}},typeof window=="undefined"&&typeof module!="undefined"?module.exports=d:b._!==a?b._.mixin(d):b._date=d})()
\ No newline at end of file
+(function(a){function t(a,b){function i(a,b){switch(a){case"M":case"MM":c[1]=~~b-1;break;case"D":case"DD":case"DDD":case"DDDD":c[2]=~~b;break;case"YY":b=~~b,c[0]=b+(b>70?1900:2e3);break;case"YYYY":c[0]=~~b;break;case"a":case"A":h=b.toLowerCase()==="pm";break;case"H":case"HH":case"h":case"hh":c[3]=~~b;break;case"m":case"mm":c[4]=~~b;break;case"s":case"ss":c[5]=~~b}}var c=[0],d=/[0-9a-zA-Z]+/g,e=[],f=[],g,h;a.replace(d,function(a){e.push(a)}),b.replace(d,function(a){f.push(a)});for(g=0;g<f.length;g++)i(f[g],e[g]);h&&c[3]<12&&(c[3]+=12);return new s(c)}function s(a){this.date=n(a);return this}function r(a){var b=Math.abs(a)/1e3,c=b/60,d=c/60,e=d/24,f=e/365;return b<45&&p("s",~~b)||b<90&&p("m")||c<45&&p("mm",~~c)||c<90&&p("h")||d<24&&p("hh",~~d)||d<48&&p("d")||e<25&&p("dd",~~e)||e<45&&p("M")||e<350&&p("MM",~~((e+15)/30))||f<2&&p("y")||p("yy",~~f)}function q(a,b){return o(a)-o(b)}function p(a,b){return h[a].replace(/%d/i,b||1)}function o(a){return isNaN(a)?n(a).getTime():a}function n(b){return b===a?new Date:b.date instanceof Date?b.date:b instanceof Date?b:m(b)?l(b):new Date(b)}function m(a){return Object.prototype.toString.call(a)==="[object Array]"}function l(a){return new Date(a[0],a[1]||0,a[2]||1,a[3]||0,a[4]||0,a[5]||0,a[6]||0)}function k(a,b,c){var d=a.date,e=(b.ms||0)+(b.s||0)*1e3+(b.m||0)*6e4+(b.h||0)*36e5+(b.d||0)*864e5+(b.w||0)*6048e5,f=(b.M||0)+(b.y||0)*12,g;e&&d.setMilliseconds(d.getMilliseconds()+e*c),f&&(g=d.getDate(),d.setDate(1),d.setMonth(d.getMonth()+f*c),d.setDate(Math.min((new Date(d.getFullYear(),d.getMonth()+1,0)).getDate(),g)));return a}function j(a,b){var c=a+"";while(c.length<b)c="0"+c;return c}var b=this,c,d=["January","February","March","April","May","June","July","August","September","October","November","December"],e=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],f=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],g=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],h={future:"in %s",past:"%s ago",s:"seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},i=function(a){var b=a%10;return~~(a%100/10)===1?"th":b===1?"st":b===2?"nd":b===3?"rd":"th"};s.prototype={format:function(a){function s(a){var b,q;switch(a){case"M":return c+1;case"Mo":return c+1+i(c+1);case"MM":return j(c+1,2);case"MMM":return e[c];case"MMMM":return d[c];case"D":return h;case"Do":return h+i(h);case"DD":return j(h,2);case"DDD":b=new Date(k,c,h),q=new Date(k,0,1);return~~((b-q)/864e5+1.5);case"DDDo":b=s("DDD");return b+i(b);case"DDDD":return j(s("DDD"),3);case"d":return l;case"do":return l+i(l);case"ddd":return g[l];case"dddd":return f[l];case"w":b=new Date(k,c,h-l+5),q=new Date(b.getFullYear(),0,4);return~~((b-q)/864e5/7+1.5);case"wo":b=s("w");return b+i(b);case"ww":return j(s("w"),2);case"YY":return(k+"").slice(-2);case"YYYY":return k;case"a":return m>11?"pm":"am";case"A":return m>11?"PM":"AM";case"H":return m;case"HH":return j(m,2);case"h":return m%12||12;case"hh":return j(m%12||12,2);case"m":return n;case"mm":return j(n,2);case"s":return o;case"ss":return j(o,2);case"z":return s("zz").replace(r,"");case"zz":b=p.indexOf("(");if(b>-1)return p.slice(b+1,p.indexOf(")"));return p.slice(p.indexOf(":")).replace(r,"");default:return a.replace("\\","")}}var b=this.date,c=b.getMonth(),h=b.getDate(),k=b.getFullYear(),l=b.getDay(),m=b.getHours(),n=b.getMinutes(),o=b.getSeconds(),p=b.toString(),q=/(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|dddd?|do?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|zz?)/g,r=/[^A-Z]/g;return a.replace(q,s)},add:function(a){return k(this,a,1)},subtract:function(a){return k(this,a,-1)},customize:function(a){var b=a.ordinal,c=a.relativeTime,j;a.weekdays&&(f=a.weekdays),a.weekdaysShort&&(g=a.weekdaysShort),a.months&&(d=a.months),a.monthsShort&&(e=a.monthsShort);if(c)for(j in c)c.hasOwnProperty(j)&&(h[j]=c[j]);b&&b instanceof Function&&(i=b)},from:function(a,b,c){var d=q(this.date,a),e=d<0?h.past:h.future;return c?d:b?r(d):e.replace(/%s/i,r(d))},fromNow:function(a,b){return this.from(c.now(),a,b)},isLeapYear:function(){return c.isLeapYear(this.date.getFullYear())}},c={date:function(a,b){return b?t(a,b):new s(a)},now:function(a){return a?(new Date).getTime():c.date()},isLeapYear:function(a){return a%4===0&&a%100!==0||a%400===0}},typeof window=="undefined"&&typeof module!="undefined"?module.exports=c:b._!==a?b._.mixin(c):b._date=c})()
\ No newline at end of file