Skip to content

Instantly share code, notes, and snippets.

@bugs181
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bugs181/8819564 to your computer and use it in GitHub Desktop.
Save bugs181/8819564 to your computer and use it in GitHub Desktop.
/**
* @overview datejs
* @version 1.0.0alpha-2014-01-07
* @author Gregory Wild-Smith <gregory@wild-smith.com>
* @copyright 2014 Gregory Wild-Smith
* @license MIT
* @homepage https://github.com/abritinthebay/datejs
*/
/*
2014 Gregory Wild-Smith
@license MIT
@homepage https://github.com/abritinthebay/datejs
2014 Gregory Wild-Smith
@license MIT
@homepage https://github.com/abritinthebay/datejs
*/
Date.CultureStrings=Date.CultureStrings||{};
Date.CultureStrings["en-US"]={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",Sunday:"Sunday",Monday:"Monday",Tuesday:"Tuesday",Wednesday:"Wednesday",Thursday:"Thursday",Friday:"Friday",Saturday:"Saturday",Sun:"Sun",Mon:"Mon",Tue:"Tue",Wed:"Wed",Thu:"Thu",Fri:"Fri",Sat:"Sat",Su:"Su",Mo:"Mo",Tu:"Tu",We:"We",Th:"Th",Fr:"Fr",Sa:"Sa",S_Sun_Initial:"S",M_Mon_Initial:"M",T_Tue_Initial:"T",W_Wed_Initial:"W",T_Thu_Initial:"T",F_Fri_Initial:"F",S_Sat_Initial:"S",January:"January",
February:"February",March:"March",April:"April",May:"May",June:"June",July:"July",August:"August",September:"September",October:"October",November:"November",December:"December",Jan_Abbr:"Jan",Feb_Abbr:"Feb",Mar_Abbr:"Mar",Apr_Abbr:"Apr",May_Abbr:"May",Jun_Abbr:"Jun",Jul_Abbr:"Jul",Aug_Abbr:"Aug",Sep_Abbr:"Sep",Oct_Abbr:"Oct",Nov_Abbr:"Nov",Dec_Abbr:"Dec",AM:"AM",PM:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,mdy:"mdy","M/d/yyyy":"M/d/yyyy","dddd, MMMM dd, yyyy":"dddd, MMMM dd, yyyy","h:mm tt":"h:mm tt",
"h:mm:ss tt":"h:mm:ss tt","dddd, MMMM dd, yyyy h:mm:ss tt":"dddd, MMMM dd, yyyy h:mm:ss tt","yyyy-MM-ddTHH:mm:ss":"yyyy-MM-ddTHH:mm:ss","yyyy-MM-dd HH:mm:ssZ":"yyyy-MM-dd HH:mm:ssZ","ddd, dd MMM yyyy HH:mm:ss":"ddd, dd MMM yyyy HH:mm:ss","MMMM dd":"MMMM dd","MMMM, yyyy":"MMMM, yyyy","/jan(uary)?/":"jan(uary)?","/feb(ruary)?/":"feb(ruary)?","/mar(ch)?/":"mar(ch)?","/apr(il)?/":"apr(il)?","/may/":"may","/jun(e)?/":"jun(e)?","/jul(y)?/":"jul(y)?","/aug(ust)?/":"aug(ust)?","/sep(t(ember)?)?/":"sep(t(ember)?)?",
"/oct(ober)?/":"oct(ober)?","/nov(ember)?/":"nov(ember)?","/dec(ember)?/":"dec(ember)?","/^su(n(day)?)?/":"^su(n(day)?)?","/^mo(n(day)?)?/":"^mo(n(day)?)?","/^tu(e(s(day)?)?)?/":"^tu(e(s(day)?)?)?","/^we(d(nesday)?)?/":"^we(d(nesday)?)?","/^th(u(r(s(day)?)?)?)?/":"^th(u(r(s(day)?)?)?)?","/^fr(i(day)?)?/":"^fr(i(day)?)?","/^sa(t(urday)?)?/":"^sa(t(urday)?)?","/^next/":"^next","/^last|past|prev(ious)?/":"^last|past|prev(ious)?","/^(\\+|aft(er)?|from|hence)/":"^(\\+|aft(er)?|from|hence)","/^(\\-|bef(ore)?|ago)/":"^(\\-|bef(ore)?|ago)",
"/^yes(terday)?/":"^yes(terday)?","/^t(od(ay)?)?/":"^t(od(ay)?)?","/^tom(orrow)?/":"^tom(orrow)?","/^n(ow)?/":"^n(ow)?","/^ms|milli(second)?s?/":"^ms|milli(second)?s?","/^sec(ond)?s?/":"^sec(ond)?s?","/^mn|min(ute)?s?/":"^mn|min(ute)?s?","/^h(our)?s?/":"^h(our)?s?","/^w(eek)?s?/":"^w(eek)?s?","/^m(onth)?s?/":"^m(onth)?s?","/^d(ay)?s?/":"^d(ay)?s?","/^y(ear)?s?/":"^y(ear)?s?","/^(a|p)/":"^(a|p)","/^(a\\.?m?\\.?|p\\.?m?\\.?)/":"^(a\\.?m?\\.?|p\\.?m?\\.?)","/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt|utc)/":"^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt|utc)",
"/^\\s*(st|nd|rd|th)/":"^\\s*(st|nd|rd|th)","/^\\s*(\\:|a(?!u|p)|p)/":"^\\s*(\\:|a(?!u|p)|p)",LINT:"LINT",TOT:"TOT",CHAST:"CHAST",NZST:"NZST",NFT:"NFT",SBT:"SBT",AEST:"AEST",ACST:"ACST",JST:"JST",CWST:"CWST",CT:"CT",ICT:"ICT",MMT:"MMT",BIOT:"BST",NPT:"NPT",IST:"IST",PKT:"PKT",AFT:"AFT",MSK:"MSK",IRST:"IRST",FET:"FET",EET:"EET",CET:"CET",UTC:"UTC",GMT:"GMT",CVT:"CVT",GST:"GST",BRT:"BRT",NST:"NST",AST:"AST",EST:"EST",CST:"CST",MST:"MST",PST:"PST",AKST:"AKST",MIT:"MIT",HST:"HST",SST:"SST",BIT:"BIT",
CHADT:"CHADT",NZDT:"NZDT",AEDT:"AEDT",ACDT:"ACDT",AZST:"AZST",IRDT:"IRDT",EEST:"EEST",CEST:"CEST",BST:"BST",PMDT:"PMDT",ADT:"ADT",NDT:"NDT",EDT:"EDT",CDT:"CDT",MDT:"MDT",PDT:"PDT",AKDT:"AKDT",HADT:"HADT"};Date.CultureStrings.lang="en-US";
(function(){function g(b){var a,c,e,d=0,g=h,m=[],t=b.length;for(a=0;a<t;a++)c=b.charCodeAt(a),e=f[c],d=g!==h?c&63|d<<6:255>>e&c,g=f[256+g+e],g===h&&(65535<d?m.push(55232+(d>>10),56320+(d&1023)):m.push(d));return String.fromCharCode.apply(null,m)}var h=0,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,0,12,24,36,60,96,84,12,12,12,48,72,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,0,12,0,12,12,12,24,12,12,12,12,12,24,12,24,12,12,12,12,12,12,12,12,12,24,12,12,12,12,12,24,12,12,12,12,12,12,12,24,12,12,12,12,12,12,12,12,12,
36,12,36,12,12,12,36,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,12,12,12,12,12],a=Date,d=Date.CultureStrings?Date.CultureStrings.lang:null,b={},c=function(a,c){var e,f,m,h=c?c:d;if(Date.CultureStrings&&Date.CultureStrings[h]&&Date.CultureStrings[h][a])e="string"===typeof Date.CultureStrings[h][a]?g(Date.CultureStrings[h][a]):Date.CultureStrings[h][a];else switch(a){case "name":e="en-US";break;case "englishName":e="English (United States)";break;case "nativeName":e="English (United States)";
break;default:if(e=a,f=a.split("_"),m=f.length,1<m&&"/"!==a.charAt(0)&&(m=f[m-1].toLowerCase(),"initial"===m||"abbr"===m))e=f[0]}"/"===a.charAt(0)&&(e=Date.CultureStrings&&Date.CultureStrings[h]&&Date.CultureStrings[h][a]?RegExp(g(Date.CultureStrings[h][a]),"i"):RegExp(a.replace(RegExp("/","g"),""),"i"));b[a]=a;return e},e=function(b){b=Date.Config.i18n+b+".js";var a=document.getElementsByTagName("head")[0]||document.documentElement,c=document.createElement("script");c.src=b;var e={done:function(){}};
c.onload=c.onreadystatechange=function(){this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(done=!0,e.done(),a.removeChild(c))};setTimeout(function(){a.insertBefore(c,a.firstChild)},0);return{done:function(b){e.done=function(){b&&b()}}}},m=function(){var b={name:c("name"),englishName:c("englishName"),nativeName:c("nativeName"),dayNames:[c("Sunday"),c("Monday"),c("Tuesday"),c("Wednesday"),c("Thursday"),c("Friday"),c("Saturday")],abbreviatedDayNames:[c("Sun"),c("Mon"),c("Tue"),
c("Wed"),c("Thu"),c("Fri"),c("Sat")],shortestDayNames:[c("Su"),c("Mo"),c("Tu"),c("We"),c("Th"),c("Fr"),c("Sa")],firstLetterDayNames:[c("S_Sun_Initial"),c("M_Mon_Initial"),c("T_Tues_Initial"),c("W_Wed_Initial"),c("T_Thu_Initial"),c("F_Fri_Initial"),c("S_Sat_Initial")],monthNames:[c("January"),c("February"),c("March"),c("April"),c("May"),c("June"),c("July"),c("August"),c("September"),c("October"),c("November"),c("December")],abbreviatedMonthNames:[c("Jan_Abbr"),c("Feb_Abbr"),c("Mar_Abbr"),c("Apr_Abbr"),
c("May_Abbr"),c("Jun_Abbr"),c("Jul_Abbr"),c("Aug_Abbr"),c("Sep_Abbr"),c("Oct_Abbr"),c("Nov_Abbr"),c("Dec_Abbr")],amDesignator:c("AM"),pmDesignator:c("PM"),firstDayOfWeek:c("firstDayOfWeek"),twoDigitYearMax:c("twoDigitYearMax"),dateElementOrder:c("mdy"),formatPatterns:{shortDate:c("M/d/yyyy"),longDate:c("dddd, MMMM dd, yyyy"),shortTime:c("h:mm tt"),longTime:c("h:mm:ss tt"),fullDateTime:c("dddd, MMMM dd, yyyy h:mm:ss tt"),sortableDateTime:c("yyyy-MM-ddTHH:mm:ss"),universalSortableDateTime:c("yyyy-MM-dd HH:mm:ssZ"),
rfc1123:c("ddd, dd MMM yyyy HH:mm:ss"),monthDay:c("MMMM dd"),yearMonth:c("MMMM, yyyy")},regexPatterns:{inTheMorning:c("/( in the )(morn(ing)?)\\b/"),thisMorning:c("/(this )(morn(ing)?)\\b/"),amThisMorning:c("/(\b\\d(am)? )(this )(morn(ing)?)/"),inTheEvening:c("/( in the )(even(ing)?)\\b/"),thisEvening:c("/(this )(even(ing)?)\\b/"),pmThisEvening:c("/(\b\\d(pm)? )(this )(even(ing)?)/"),jan:c("/jan(uary)?/"),feb:c("/feb(ruary)?/"),mar:c("/mar(ch)?/"),apr:c("/apr(il)?/"),may:c("/may/"),jun:c("/jun(e)?/"),
jul:c("/jul(y)?/"),aug:c("/aug(ust)?/"),sep:c("/sep(t(ember)?)?/"),oct:c("/oct(ober)?/"),nov:c("/nov(ember)?/"),dec:c("/dec(ember)?/"),sun:c("/^su(n(day)?)?/"),mon:c("/^mo(n(day)?)?/"),tue:c("/^tu(e(s(day)?)?)?/"),wed:c("/^we(d(nesday)?)?/"),thu:c("/^th(u(r(s(day)?)?)?)?/"),fri:c("/fr(i(day)?)?/"),sat:c("/^sa(t(urday)?)?/"),future:c("/^next/"),past:c("/last|past|prev(ious)?/"),add:c("/^(\\+|aft(er)?|from|hence)/"),subtract:c("/^(\\-|bef(ore)?|ago)/"),yesterday:c("/^yes(terday)?/"),today:c("/^t(od(ay)?)?/"),
tomorrow:c("/^tom(orrow)?/"),now:c("/^n(ow)?/"),millisecond:c("/^ms|milli(second)?s?/"),second:c("/^sec(ond)?s?/"),minute:c("/^mn|min(ute)?s?/"),hour:c("/^h(our)?s?/"),week:c("/^w(eek)?s?/"),month:c("/^m(onth)?s?/"),day:c("/^d(ay)?s?/"),year:c("/^y(ear)?s?/"),shortMeridian:c("/^(a|p)/"),longMeridian:c("/^(a\\.?m?\\.?|p\\.?m?\\.?)/"),timezone:c("/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\\s*(\\+|\\-)\\s*\\d\\d\\d\\d?)|gmt|utc)/"),ordinalSuffix:c("/^\\s*(st|nd|rd|th)/"),timeContext:c("/^\\s*(\\:|a(?!u|p)|p)/")},
timezones:[],abbreviatedTimeZoneDST:{},abbreviatedTimeZoneStandard:{}};b.abbreviatedTimeZoneDST[c("CHADT")]="+1345";b.abbreviatedTimeZoneDST[c("NZDT")]="+1300";b.abbreviatedTimeZoneDST[c("AEDT")]="+1100";b.abbreviatedTimeZoneDST[c("ACDT")]="+1030";b.abbreviatedTimeZoneDST[c("AZST")]="+0500";b.abbreviatedTimeZoneDST[c("IRDT")]="+0430";b.abbreviatedTimeZoneDST[c("EEST")]="+0300";b.abbreviatedTimeZoneDST[c("CEST")]="+0200";b.abbreviatedTimeZoneDST[c("BST")]="+0100";b.abbreviatedTimeZoneDST[c("PMDT")]=
"-0200";b.abbreviatedTimeZoneDST[c("ADT")]="-0300";b.abbreviatedTimeZoneDST[c("NDT")]="-0230";b.abbreviatedTimeZoneDST[c("EDT")]="-0400";b.abbreviatedTimeZoneDST[c("CDT")]="-0500";b.abbreviatedTimeZoneDST[c("MDT")]="-0600";b.abbreviatedTimeZoneDST[c("PDT")]="-0700";b.abbreviatedTimeZoneDST[c("AKDT")]="-0800";b.abbreviatedTimeZoneDST[c("HADT")]="-0900";b.abbreviatedTimeZoneStandard[c("LINT")]="+1400";b.abbreviatedTimeZoneStandard[c("TOT")]="+1300";b.abbreviatedTimeZoneStandard[c("CHAST")]="+1245";
b.abbreviatedTimeZoneStandard[c("NZST")]="+1200";b.abbreviatedTimeZoneStandard[c("NFT")]="+1130";b.abbreviatedTimeZoneStandard[c("SBT")]="+1100";b.abbreviatedTimeZoneStandard[c("AEST")]="+1000";b.abbreviatedTimeZoneStandard[c("ACST")]="+0930";b.abbreviatedTimeZoneStandard[c("JST")]="+0900";b.abbreviatedTimeZoneStandard[c("CWST")]="+0845";b.abbreviatedTimeZoneStandard[c("CT")]="+0800";b.abbreviatedTimeZoneStandard[c("ICT")]="+0700";b.abbreviatedTimeZoneStandard[c("MMT")]="+0630";b.abbreviatedTimeZoneStandard[c("BST")]=
"+0600";b.abbreviatedTimeZoneStandard[c("NPT")]="+0545";b.abbreviatedTimeZoneStandard[c("IST")]="+0530";b.abbreviatedTimeZoneStandard[c("PKT")]="+0500";b.abbreviatedTimeZoneStandard[c("AFT")]="+0430";b.abbreviatedTimeZoneStandard[c("MSK")]="+0400";b.abbreviatedTimeZoneStandard[c("IRST")]="+0330";b.abbreviatedTimeZoneStandard[c("FET")]="+0300";b.abbreviatedTimeZoneStandard[c("EET")]="+0200";b.abbreviatedTimeZoneStandard[c("CET")]="+0100";b.abbreviatedTimeZoneStandard[c("GMT")]="+0000";b.abbreviatedTimeZoneStandard[c("UTC")]=
"+0000";b.abbreviatedTimeZoneStandard[c("CVT")]="-0100";b.abbreviatedTimeZoneStandard[c("GST")]="-0200";b.abbreviatedTimeZoneStandard[c("BRT")]="-0300";b.abbreviatedTimeZoneStandard[c("NST")]="-0330";b.abbreviatedTimeZoneStandard[c("AST")]="-0400";b.abbreviatedTimeZoneStandard[c("EST")]="-0500";b.abbreviatedTimeZoneStandard[c("CST")]="-0600";b.abbreviatedTimeZoneStandard[c("MST")]="-0700";b.abbreviatedTimeZoneStandard[c("PST")]="-0800";b.abbreviatedTimeZoneStandard[c("AKST")]="-0900";b.abbreviatedTimeZoneStandard[c("MIT")]=
"-0930";b.abbreviatedTimeZoneStandard[c("HST")]="-1000";b.abbreviatedTimeZoneStandard[c("SST")]="-1100";b.abbreviatedTimeZoneStandard[c("BIT")]="-1200";for(var a in b.abbreviatedTimeZoneStandard)b.abbreviatedTimeZoneStandard.hasOwnProperty(a)&&b.timezones.push({name:a,offset:b.abbreviatedTimeZoneStandard[a]});for(a in b.abbreviatedTimeZoneDST)b.abbreviatedTimeZoneDST.hasOwnProperty(a)&&b.timezones.push({name:a,offset:b.abbreviatedTimeZoneDST[a],dst:!0});return b};a.i18n={__:function(b,a){return c(b,
a)},currentLanguage:function(){return d||"en-US"},setLanguage:function(b,a){if(a||"en-US"===b||Date.CultureStrings&&Date.CultureStrings[b])d=b,Date.CultureStrings.lang=b,Date.CultureInfo=m();else if(!Date.CultureStrings||!Date.CultureStrings[b])if("undefined"!==typeof exports&&this.exports!==exports)try{require("../i18n/"+b+".js"),d=b,Date.CultureStrings.lang=b,Date.CultureInfo=m()}catch(c){throw Error("The DateJS IETF language tag '"+b+"' could not be loaded by Node. It likely does not exist.");
}else Date.Config&&Date.Config.i18n?e(b).done(function(){d=b;Date.CultureStrings.lang=b;Date.CultureInfo=m()}):Date.console.error("The DateJS IETF language tag '"+b+"' is not available and has not been loaded.")},getLoggedKeys:function(){return b},updateCultureInfo:function(){Date.CultureInfo=m()}};a.i18n.updateCultureInfo()})();
(function(){var g=Date,h=g.prototype,f=function(b,a){a||(a=2);return("000"+b).slice(-1*a)};g.console=console?console:{log:function(){},error:function(){}};g.initOverloads=function(){g.now?g._now||(g._now=g.now):g._now=function(){return(new Date).getTime()};g.now=function(b){return b?g.present():g._now()};h.toISOString||(h.toISOString=function(){return this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+
"."+String((this.getUTCMilliseconds()/1E3).toFixed(3)).slice(2,5)+"Z"});void 0===h._toString&&(h._toString=h.toString)};g.initOverloads();h.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this};h.setTimeToNow=function(){var b=new Date;this.setHours(b.getHours());this.setMinutes(b.getMinutes());this.setSeconds(b.getSeconds());this.setMilliseconds(b.getMilliseconds());return this};g.today=function(){return(new Date).clearTime()};g.present=function(){return new Date};
g.compare=function(b,a){if(isNaN(b)||isNaN(a))throw Error(b+" - "+a);if(b instanceof Date&&a instanceof Date)return b<a?-1:b>a?1:0;throw new TypeError(b+" - "+a);};g.equals=function(b,a){return 0===b.compareTo(a)};g.getDayName=function(b){return Date.CultureInfo.dayNames[b]};g.getDayNumberFromName=function(b){var a=Date.CultureInfo.dayNames,e=Date.CultureInfo.abbreviatedDayNames,d=Date.CultureInfo.shortestDayNames;b=b.toLowerCase();for(var k=0;k<a.length;k++)if(a[k].toLowerCase()===b||e[k].toLowerCase()===
b||d[k].toLowerCase()===b)return k;return-1};g.getMonthNumberFromName=function(b){var a=Date.CultureInfo.monthNames,e=Date.CultureInfo.abbreviatedMonthNames;b=b.toLowerCase();for(var d=0;d<a.length;d++)if(a[d].toLowerCase()===b||e[d].toLowerCase()===b)return d;return-1};g.getMonthName=function(b){return Date.CultureInfo.monthNames[b]};g.isLeapYear=function(b){return 0===b%4&&0!==b%100||0===b%400};g.getDaysInMonth=function(b,a){!a&&g.validateMonth(b)&&(a=b,b=Date.today().getFullYear());return[31,g.isLeapYear(b)?
29:28,31,30,31,30,31,31,30,31,30,31][a]};g.getTimezoneAbbreviation=function(b,a){var e,d=a?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard;for(e in d)if(d.hasOwnProperty(e)&&d[e]===b)return e;return null};g.getTimezoneOffset=function(b,a){var e,d=[],k=Date.CultureInfo.timezones;for(e=0;e<k.length;e++)k[e].name===b.toUpperCase()&&d.push(e);if(!k[d[0]])return null;if(1!==d.length&&a)for(e=0;e<d.length;e++){if(k[d[e]].dst)return k[d[e]].offset}else return k[d[0]].offset};
g.getQuarter=function(b){b=b||new Date;return[1,2,3,4][Math.floor(b.getMonth()/3)]};g.getDaysLeftInQuarter=function(b){b=b||new Date;var a=new Date(b);a.setMonth(a.getMonth()+3-a.getMonth()%3,0);return Math.floor((a-b)/864E5)};h.clone=function(){return new Date(this.getTime())};h.compareTo=function(b){return Date.compare(this,b)};h.equals=function(b){return Date.equals(this,void 0!==b?b:new Date)};h.between=function(b,a){return this.getTime()>=b.getTime()&&this.getTime()<=a.getTime()};h.isAfter=function(b){return 1===
this.compareTo(b||new Date)};h.isBefore=function(b){return-1===this.compareTo(b||new Date)};h.isToday=h.isSameDay=function(b){return this.clone().clearTime().equals((b||new Date).clone().clearTime())};h.addMilliseconds=function(b){if(!b)return this;this.setTime(this.getTime()+1*b);return this};h.addSeconds=function(b){return b?this.addMilliseconds(1E3*b):this};h.addMinutes=function(b){return b?this.addMilliseconds(6E4*b):this};h.addHours=function(b){return b?this.addMilliseconds(36E5*b):this};h.addDays=
function(b){if(!b)return this;this.setDate(this.getDate()+1*b);return this};h.addWeekdays=function(b){if(!b)return this;var a=this.getDay(),e=Math.ceil(Math.abs(b)/7);(0===a||6===a)&&0<b&&(this.next().monday(),this.addDays(-1));if(0>b){for(;0>b;)this.addDays(-1),a=this.getDay(),0!==a&&6!==a&&b++;return this}if(5<b||6-a<=b)b+=2*e;return this.addDays(b)};h.addWeeks=function(b){return b?this.addDays(7*b):this};h.addMonths=function(b){if(!b)return this;var a=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+
1*b);this.setDate(Math.min(a,g.getDaysInMonth(this.getFullYear(),this.getMonth())));return this};h.addQuarters=function(b){return b?this.addMonths(3*b):this};h.addYears=function(b){return b?this.addMonths(12*b):this};h.add=function(b){if("number"===typeof b)return this._orient=b,this;b.milliseconds&&this.addMilliseconds(b.milliseconds);b.seconds&&this.addSeconds(b.seconds);b.minutes&&this.addMinutes(b.minutes);b.hours&&this.addHours(b.hours);b.weeks&&this.addWeeks(b.weeks);b.months&&this.addMonths(b.months);
b.years&&this.addYears(b.years);b.days&&this.addDays(b.days);return this};h.getWeek=function(b){var a=new Date(this.valueOf());b?(a.addMinutes(a.getTimezoneOffset()),b=a.clone()):b=this;b=(b.getDay()+6)%7;a.setDate(a.getDate()-b+3);b=a.valueOf();a.setMonth(0,1);4!==a.getDay()&&a.setMonth(0,1+(4-a.getDay()+7)%7);return 1+Math.ceil((b-a)/6048E5)};h.getISOWeek=function(){return f(this.getWeek(!0))};h.setWeek=function(b){return this.moveToDayOfWeek(1,1<this.getDay()?-1:1).addWeeks(b-this.getWeek())};
h.setQuarter=function(b){b=Math.abs(3*(b-1)+1);return this.setMonth(b,1)};h.getQuarter=function(){return Date.getQuarter(this)};h.getDaysLeftInQuarter=function(){return Date.getDaysLeftInQuarter(this)};var a=function(b,a,e,d){if("undefined"===typeof b)return!1;if("number"!==typeof b)throw new TypeError(b+" is not a Number.");return b<a||b>e?!1:!0};g.validateMillisecond=function(b){return a(b,0,999,"millisecond")};g.validateSecond=function(b){return a(b,0,59,"second")};g.validateMinute=function(b){return a(b,
0,59,"minute")};g.validateHour=function(b){return a(b,0,23,"hour")};g.validateDay=function(b,c,e){return a(b,1,g.getDaysInMonth(c,e),"day")};g.validateWeek=function(b){return a(b,0,53,"week")};g.validateMonth=function(b){return a(b,0,11,"month")};g.validateYear=function(b){return a(b,-271822,275760,"year")};h.set=function(b){g.validateMillisecond(b.millisecond)&&this.addMilliseconds(b.millisecond-this.getMilliseconds());g.validateSecond(b.second)&&this.addSeconds(b.second-this.getSeconds());g.validateMinute(b.minute)&&
this.addMinutes(b.minute-this.getMinutes());g.validateHour(b.hour)&&this.addHours(b.hour-this.getHours());g.validateMonth(b.month)&&this.addMonths(b.month-this.getMonth());g.validateYear(b.year)&&this.addYears(b.year-this.getFullYear());g.validateDay(b.day,this.getFullYear(),this.getMonth())&&this.addDays(b.day-this.getDate());b.timezone&&this.setTimezone(b.timezone);b.timezoneOffset&&this.setTimezoneOffset(b.timezoneOffset);b.week&&g.validateWeek(b.week)&&this.setWeek(b.week);return this};h.moveToFirstDayOfMonth=
function(){return this.set({day:1})};h.moveToLastDayOfMonth=function(){return this.set({day:g.getDaysInMonth(this.getFullYear(),this.getMonth())})};h.moveToNthOccurrence=function(b,a){if("Weekday"===b){if(0<a)this.moveToFirstDayOfMonth(),this.is().weekday()&&(a-=1);else if(0>a)this.moveToLastDayOfMonth(),this.is().weekday()&&(a+=1);else return this;return this.addWeekdays(a)}var e=0;if(0<a)e=a-1;else if(-1===a)return this.moveToLastDayOfMonth(),this.getDay()!==b&&this.moveToDayOfWeek(b,-1),this;return this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(b,
1).addWeeks(e)};h.moveToDayOfWeek=function(b,a){var e=(b-this.getDay()+7*(a||1))%7;return this.addDays(0===e?e+7*(a||1):e)};h.moveToMonth=function(b,a){var e=(b-this.getMonth()+12*(a||1))%12;return this.addMonths(0===e?e+12*(a||1):e)};h.getOrdinate=function(){var b=this.getDate();return d(b)};h.getOrdinalNumber=function(){return Math.ceil((this.clone().clearTime()-new Date(this.getFullYear(),0,1))/864E5)+1};h.getTimezone=function(){return g.getTimezoneAbbreviation(this.getUTCOffset(),this.isDaylightSavingTime())};
h.setTimezoneOffset=function(b){var a=this.getTimezoneOffset();return(b=-6*Number(b)/10)||0===b?this.addMinutes(a-b):this};h.setTimezone=function(b){return this.setTimezoneOffset(g.getTimezoneOffset(b))};h.hasDaylightSavingTime=function(){return Date.today().set({month:0,day:1}).getTimezoneOffset()!==Date.today().set({month:6,day:1}).getTimezoneOffset()};h.isDaylightSavingTime=function(){return Date.today().set({month:0,day:1}).getTimezoneOffset()!==this.getTimezoneOffset()};h.getUTCOffset=function(b){b=
-10*(b||this.getTimezoneOffset())/6;if(0>b)return b=(b-1E4).toString(),b.charAt(0)+b.substr(2);b=(b+1E4).toString();return"+"+b.substr(1)};h.getElapsed=function(b){return(b||new Date)-this};var d=function(b){switch(1*b){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th"}};h.toString=function(b,a){var e=this;if(!a&&b&&1===b.length){var g,k=Date.CultureInfo.formatPatterns;e.t=e.toString;switch(b){case "d":return e.t(k.shortDate);case "D":return e.t(k.longDate);
case "F":return e.t(k.fullDateTime);case "m":return e.t(k.monthDay);case "r":case "R":return g=e.clone().addMinutes(e.getTimezoneOffset()),g.toString(k.rfc1123)+" GMT";case "s":return e.t(k.sortableDateTime);case "t":return e.t(k.shortTime);case "T":return e.t(k.longTime);case "u":return g=e.clone().addMinutes(e.getTimezoneOffset()),g.toString(k.universalSortableDateTime);case "y":return e.t(k.yearMonth)}}return b?b.replace(/((\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S|q|Q)(?![^\[]*\]))/g,
function(a){if("\\"===a.charAt(0))return a.replace("\\","");e.h=e.getHours;switch(a){case "hh":return f(13>e.h()?0===e.h()?12:e.h():e.h()-12);case "h":return 13>e.h()?0===e.h()?12:e.h():e.h()-12;case "HH":return f(e.h());case "H":return e.h();case "mm":return f(e.getMinutes());case "m":return e.getMinutes();case "ss":return f(e.getSeconds());case "s":return e.getSeconds();case "yyyy":return f(e.getFullYear(),4);case "yy":return f(e.getFullYear());case "dddd":return Date.CultureInfo.dayNames[e.getDay()];
case "ddd":return Date.CultureInfo.abbreviatedDayNames[e.getDay()];case "dd":return f(e.getDate());case "d":return e.getDate();case "MMMM":return Date.CultureInfo.monthNames[e.getMonth()];case "MMM":return Date.CultureInfo.abbreviatedMonthNames[e.getMonth()];case "MM":return f(e.getMonth()+1);case "M":return e.getMonth()+1;case "t":return 12>e.h()?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case "tt":return 12>e.h()?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;
case "S":return d(e.getDate());case "Q":return"Q"+e.getQuarter();case "q":return String(e.getQuarter())}}).replace(/\[|\]/g,""):this._toString()}})();
(function(){Date.Parsing={Exception:function(a){this.message="Parse error at '"+a.substring(0,10)+" ...'"}};var g=Date.Parsing,h=[0,31,59,90,120,151,181,212,243,273,304,334],f=[0,31,60,91,121,152,182,213,244,274,305,335];g.isLeapYear=function(a){return 0===a%4&&0!==a%100||0===a%400};g.processTimeObject=function(a){var d,b;d=new Date;b=g.isLeapYear(a.year)?f:h;a.hours=a.hours?a.hours:0;a.minutes=a.minutes?a.minutes:0;a.seconds=a.seconds?a.seconds:0;a.milliseconds=a.milliseconds?a.milliseconds:0;a.year||
(a.year=d.getFullYear());if(a.month||!a.week&&!a.dayOfYear)a.month=a.month?a.month:0,a.day=a.day?a.day:1,a.dayOfYear=b[a.month]+a.day;else for(a.dayOfYear||(a.weekDay=a.weekDay||0===a.weekDay?a.weekDay:1,d=new Date(a.year,0,4),d=0===d.getDay()?7:d.getDay(),a.dayOfYear=7*a.week+(0===a.weekDay?7:a.weekDay)-(d+3)),d=0;d<=b.length;d++)if(a.dayOfYear<b[d]||d===b.length){a.day=a.day?a.day:a.dayOfYear-b[d-1];break}else a.month=d;b=new Date(a.year,a.month,a.day,a.hours,a.minutes,a.seconds,a.milliseconds);
a.zone&&("Z"===a.zone.toUpperCase()||0===a.zone_hours&&0===a.zone_minutes?d=-(new Date).getTimezoneOffset():(d=60*a.zone_hours+(a.zone_minutes?a.zone_minutes:0),"+"===a.zone_sign&&(d*=-1),d-=(new Date).getTimezoneOffset()),b.setMinutes(b.getMinutes()+d));return b};g.ISO={regex:/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-4])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?\s?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/,
parse:function(a){a=a.match(this.regex);if(!a||!a.length)return null;var d={year:a[1]?Number(a[1]):a[1],month:a[5]?Number(a[5])-1:a[5],day:a[7]?Number(a[7]):a[7],week:a[8]?Number(a[8]):a[8],weekDay:a[9]?7===Math.abs(Number(a[9]))?0:Math.abs(Number(a[9])):a[9],dayOfYear:a[10]?Number(a[10]):a[10],hours:a[15]?Number(a[15]):a[15],minutes:a[16]?Number(a[16].replace(":","")):a[16],seconds:a[19]?Math.floor(Number(a[19].replace(":","").replace(",","."))):a[19],milliseconds:a[20]?1E3*Number(a[20].replace(",",
".")):a[20],zone:a[21],zone_sign:a[22],zone_hours:a[23]&&"undefined"!==typeof a[23]?Number(a[23]):a[23],zone_minutes:a[24]&&"undefined"!==typeof a[23]?Number(a[24]):a[24]};a[18]&&((a[18]=60*Number(a[18].replace(",",".")),d.minutes)?d.seconds||(d.seconds=a[18]):d.minutes=a[18]);return d.year&&(d.year||d.month||d.day||d.week||d.dayOfYear)?g.processTimeObject(d):null}};g.Numeric={regex:/\b([0-1]?[0-9])([0-3]?[0-9])([0-2]?[0-9]?[0-9][0-9])\b/i,parse:function(a){var d,b={},c=Date.CultureInfo.dateElementOrder.split("");
if(isNaN(parseFloat(a))||!isFinite(a)||"+"===a[0]&&"-"===a[0])return null;if(5>a.length)return b.year=a,g.processTimeObject(b);a=a.match(this.regex);if(!a||!a.length)return null;for(d=0;d<c.length;d++)switch(c[d]){case "d":b.day=a[d+1];break;case "m":b.month=a[d+1]-1;break;case "y":b.year=a[d+1]}return g.processTimeObject(b)}};g.Normalizer={parse:function(a){var d=Date.CultureInfo.regexPatterns,b=Date.i18n.__;a=a.replace(d.jan.source,"January");a=a.replace(d.feb,"February");a=a.replace(d.mar,"March");
a=a.replace(d.apr,"April");a=a.replace(d.may,"May");a=a.replace(d.jun,"June");a=a.replace(d.jul,"July");a=a.replace(d.aug,"August");a=a.replace(d.sep,"September");a=a.replace(d.oct,"October");a=a.replace(d.nov,"November");a=a.replace(d.dec,"December");a=a.replace(d.tomorrow,Date.today().addDays(1).toString("d"));a=a.replace(d.yesterday,Date.today().addDays(-1).toString("d"));a=a.replace(RegExp(d.today.source+"\\b","i"),Date.today().toString("d"));a=a.replace(/\bat\b/gi,"");a=a.replace(/\s{2,}/," ");
a=a.replace(RegExp("(\\b\\d\\d?("+b("AM")+"|"+b("PM")+")? )("+d.tomorrow.source.slice(1)+")","i"),function(a,b,d,k,f){return Date.today().addDays(1).toString("d")+" "+b});a=a.replace(RegExp("(("+d.past.source+")\\s("+d.mon.source+"))"),Date.today().last().monday().toString("d"));a=a.replace(RegExp("(("+d.past.source+")\\s("+d.tue.source+"))"),Date.today().last().tuesday().toString("d"));a=a.replace(RegExp("(("+d.past.source+")\\s("+d.wed.source+"))"),Date.today().last().wednesday().toString("d"));
a=a.replace(RegExp("(("+d.past.source+")\\s("+d.thu.source+"))"),Date.today().last().thursday().toString("d"));a=a.replace(RegExp("(("+d.past.source+")\\s("+d.fri.source+"))"),Date.today().last().friday().toString("d"));a=a.replace(RegExp("(("+d.past.source+")\\s("+d.sat.source+"))"),Date.today().last().saturday().toString("d"));a=a.replace(RegExp("(("+d.past.source+")\\s("+d.sun.source+"))"),Date.today().last().sunday().toString("d"));a=a.replace(d.amThisMorning,function(a,b){return b});a=a.replace(d.inTheMorning,
"am");a=a.replace(d.thisMorning,"9am");a=a.replace(d.amThisEvening,function(a,b){return b});a=a.replace(d.inTheEvening,"pm");return a=a.replace(d.thisEvening,"7pm")}}})();
(function(){for(var g=Date.Parsing,h=g.Operators={rtoken:function(a){return function(c){var e=c.match(a);if(e)return[e[0],c.substring(e[0].length)];throw new g.Exception(c);}},token:function(a){return function(a){return h.rtoken(RegExp("^s*"+a+"s*"))(a)}},stoken:function(a){return h.rtoken(RegExp("^"+a))},until:function(a){return function(c){for(var e=[],d=null;c.length;){try{d=a.call(this,c)}catch(k){e.push(d[0]);c=d[1];continue}break}return[e,c]}},many:function(a){return function(c){for(var e=[],
d=null;c.length;){try{d=a.call(this,c)}catch(k){break}e.push(d[0]);c=d[1]}return[e,c]}},optional:function(a){return function(c){var e=null;try{e=a.call(this,c)}catch(d){return[null,c]}return[e[0],e[1]]}},not:function(a){return function(c){try{a.call(this,c)}catch(e){return[null,c]}throw new g.Exception(c);}},ignore:function(a){return a?function(c){var e=null,e=a.call(this,c);return[null,e[1]]}:null},product:function(){for(var a=arguments[0],c=Array.prototype.slice.call(arguments,1),e=[],d=0;d<a.length;d++)e.push(h.each(a[d],
c));return e},cache:function(a){var c={},e=null;return function(d){try{e=c[d]=c[d]||a.call(this,d)}catch(k){e=c[d]=k}if(e instanceof g.Exception)throw e;return e}},any:function(){var a=arguments;return function(c){for(var e=null,d=0;d<a.length;d++)if(null!=a[d]){try{e=a[d].call(this,c)}catch(k){e=null}if(e)return e}throw new g.Exception(c);}},each:function(){var a=arguments;return function(c){for(var e=[],d=null,k=0;k<a.length;k++)if(null!=a[k]){try{d=a[k].call(this,c)}catch(f){throw new g.Exception(c);
}e.push(d[0]);c=d[1]}return[e,c]}},all:function(){var a=a;return a.each(a.optional(arguments))},sequence:function(a,c,e){c=c||h.rtoken(/^\s*/);e=e||null;return 1==a.length?a[0]:function(d){for(var k=null,f=null,n=[],h=0;h<a.length;h++){try{k=a[h].call(this,d)}catch(p){break}n.push(k[0]);try{f=c.call(this,k[1])}catch(s){f=null;break}d=f[1]}if(!k)throw new g.Exception(d);if(f)throw new g.Exception(f[1]);if(e)try{k=e.call(this,k[1])}catch(u){throw new g.Exception(k[1]);}return[n,k?k[1]:d]}},between:function(a,
c,e){e=e||a;var d=h.each(h.ignore(a),c,h.ignore(e));return function(a){a=d.call(this,a);return[[a[0][0],r[0][2]],a[1]]}},list:function(a,c,d){c=c||h.rtoken(/^\s*/);d=d||null;return a instanceof Array?h.each(h.product(a.slice(0,-1),h.ignore(c)),a.slice(-1),h.ignore(d)):h.each(h.many(h.each(a,h.ignore(c))),px,h.ignore(d))},set:function(a,c,d){c=c||h.rtoken(/^\s*/);d=d||null;return function(f){for(var k=null,l=k=null,n=null,q=[[],f],p=!1,s=0;s<a.length;s++){k=l=null;p=1==a.length;try{k=a[s].call(this,
f)}catch(u){continue}n=[[k[0]],k[1]];if(0<k[1].length&&!p)try{l=c.call(this,k[1])}catch(t){p=!0}else p=!0;p||0!==l[1].length||(p=!0);if(!p){k=[];for(p=0;p<a.length;p++)s!=p&&k.push(a[p]);k=h.set(k,c).call(this,l[1]);0<k[0].length&&(n[0]=n[0].concat(k[0]),n[1]=k[1])}n[1].length<q[1].length&&(q=n);if(0===q[1].length)break}if(0===q[0].length)return q;if(d){try{l=d.call(this,q[1])}catch(v){throw new g.Exception(q[1]);}q[1]=l[1]}return q}},forward:function(a,c){return function(d){return a[c].call(this,
d)}},replace:function(a,c){return function(d){d=a.call(this,d);return[c,d[1]]}},process:function(a,c){return function(d){d=a.call(this,d);return[c.call(this,d[0]),d[1]]}},min:function(a,c){return function(d){var f=c.call(this,d);if(f[0].length<a)throw new g.Exception(d);return f}}},f=function(a){return function(){var c=null,d=[],f;1<arguments.length?c=Array.prototype.slice.call(arguments):arguments[0]instanceof Array&&(c=arguments[0]);if(c){if(f=c.shift(),0<f.length)return c.unshift(f[void 0]),d.push(a.apply(null,
c)),c.shift(),d}else return a.apply(null,arguments)}},a="optional not ignore cache".split(/\s/),d=0;d<a.length;d++)h[a[d]]=f(h[a[d]]);f=function(a){return function(){return arguments[0]instanceof Array?a.apply(null,arguments[0]):a.apply(null,arguments)}};a="each any all".split(/\s/);for(d=0;d<a.length;d++)h[a[d]]=f(h[a[d]])})();
(function(){var g=Date,h=function(a){for(var b=[],c=0;c<a.length;c++)a[c]instanceof Array?b=b.concat(h(a[c])):a[c]&&b.push(a[c]);return b};g.Grammar={};g.Translator={hour:function(a){return function(){this.hour=Number(a)}},minute:function(a){return function(){this.minute=Number(a)}},second:function(a){return function(){this.second=Number(a)}},secondAndMillisecond:function(a){return function(){var b=a.match(/^([0-5][0-9])\.([0-9]{1,3})/);this.second=Number(b[1]);this.millisecond=Number(b[2])}},meridian:function(a){return function(){this.meridian=
a.slice(0,1).toLowerCase()}},timezone:function(a){return function(){var b=a.replace(/[^\d\+\-]/g,"");b.length?this.timezoneOffset=Number(b):this.timezone=a.toLowerCase()}},day:function(a){var b=a[0];return function(){this.day=Number(b.match(/\d+/)[0]);if(1>this.day)throw"invalid day";}},month:function(a){return function(){this.month=3===a.length?"jan feb mar apr may jun jul aug sep oct nov dec".indexOf(a)/4:Number(a)-1;if(0>this.month)throw"invalid month";}},year:function(a){return function(){var b=
Number(a);this.year=2<a.length?b:b+(b+2E3<Date.CultureInfo.twoDigitYearMax?2E3:1900)}},rday:function(a){return function(){switch(a){case "yesterday":this.days=-1;break;case "tomorrow":this.days=1;break;case "today":this.days=0;break;case "now":this.days=0,this.now=!0}}},finishExact:function(a){a=a instanceof Array?a:[a];for(var b=0;b<a.length;b++)a[b]&&a[b].call(this);a=new Date;!this.hour&&!this.minute||this.month||this.year||this.day||(this.day=a.getDate());this.year||(this.year=a.getFullYear());
this.month||0===this.month||(this.month=a.getMonth());this.day||(this.day=1);this.hour||(this.hour=0);this.minute||(this.minute=0);this.second||(this.second=0);this.millisecond||(this.millisecond=0);this.meridian&&this.hour&&("p"==this.meridian&&12>this.hour?this.hour+=12:"a"==this.meridian&&12==this.hour&&(this.hour=0));if(this.day>g.getDaysInMonth(this.year,this.month))throw new RangeError(this.day+" is not a valid value for days.");a=new Date(this.year,this.month,this.day,this.hour,this.minute,
this.second,this.millisecond);100>this.year&&a.setFullYear(this.year);this.timezone?a.set({timezone:this.timezone}):this.timezoneOffset&&a.set({timezoneOffset:this.timezoneOffset});return a},finish:function(a){a=a instanceof Array?h(a):[a];if(0===a.length)return null;for(var b=0;b<a.length;b++)"function"==typeof a[b]&&a[b].call(this);a=g.today();if(!this.now||this.unit||this.operator)this.now&&(a=new Date);else return new Date;var b=!!(this.days&&null!==this.days||this.orient||this.operator),c,d,
e;e="past"==this.orient||"subtract"==this.operator?-1:1;this.now||-1=="hour minute second".indexOf(this.unit)||a.setTimeToNow();this.month&&"week"==this.unit&&(this.value=this.month+1,delete this.month,delete this.day);!this.month&&0!==this.month||-1=="year day hour minute second".indexOf(this.unit)||(this.value=this.month+1,this.month=null,b=!0);b||!this.weekday||this.day||this.days||(c=Date[this.weekday](),this.day=c.getDate(),this.month||(this.month=c.getMonth()),this.year=c.getFullYear());b&&
this.weekday&&"month"!=this.unit&&"week"!=this.unit&&(this.unit="day",c=g.getDayNumberFromName(this.weekday)-a.getDay(),d=7,this.days=c?(c+e*d)%d:e*d);this.month&&"day"==this.unit&&this.operator&&(this.value=this.month+1,this.month=null);null!=this.value&&null!=this.month&&null!=this.year&&(this.day=1*this.value);this.month&&!this.day&&this.value&&(a.set({day:1*this.value}),b||(this.day=1*this.value));this.month||!this.value||"month"!=this.unit||this.now||(this.month=this.value,b=!0);b&&(this.month||
0===this.month)&&"year"!=this.unit&&(this.unit="month",c=this.month-a.getMonth(),d=12,this.months=c?(c+e*d)%d:e*d,this.month=null);this.unit||(this.unit="day");if(!this.value&&this.operator&&null!==this.operator&&this[this.unit+"s"]&&null!==this[this.unit+"s"])this[this.unit+"s"]=this[this.unit+"s"]+("add"==this.operator?1:-1)+(this.value||0)*e;else if(null==this[this.unit+"s"]||null!=this.operator)this.value||(this.value=1),this[this.unit+"s"]=this.value*e;this.meridian&&this.hour&&("p"==this.meridian&&
12>this.hour?this.hour+=12:"a"==this.meridian&&12==this.hour&&(this.hour=0));!this.weekday||"week"===this.unit||this.day||this.days||(c=Date[this.weekday](),this.day=c.getDate(),c.getMonth()!==a.getMonth()&&(this.month=c.getMonth()));!this.month&&0!==this.month||this.day||(this.day=1);if(!this.orient&&!this.operator&&"week"==this.unit&&this.value&&!this.day&&!this.month)return Date.today().setWeek(this.value);if("week"==this.unit&&this.weeks&&!this.day&&!this.month)return a=Date[this.weekday?this.weekday:
"today"]().addWeeks(this.weeks),this.now&&a.setTimeToNow(),a;b&&this.timezone&&this.day&&this.days&&(this.day=this.days);return b?a.add(this):a.set(this)}};var f=g.Parsing.Operators,a=g.Grammar,d=g.Translator,b;a.datePartDelimiter=f.rtoken(/^([\s\-\.\,\/\x27]+)/);a.timePartDelimiter=f.stoken(":");a.whiteSpace=f.rtoken(/^\s*/);a.generalDelimiter=f.rtoken(/^(([\s\,]|at|@|on)+)/);var c={};a.ctoken=function(a){var b=c[a];if(!b){for(var b=Date.CultureInfo.regexPatterns,d=a.split(/\s+/),e=[],g=0;g<d.length;g++)e.push(f.replace(f.rtoken(b[d[g]]),
d[g]));b=c[a]=f.any.apply(null,e)}return b};a.ctoken2=function(a){return f.rtoken(Date.CultureInfo.regexPatterns[a])};a.h=f.cache(f.process(f.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),d.hour));a.hh=f.cache(f.process(f.rtoken(/^(0[0-9]|1[0-2])/),d.hour));a.H=f.cache(f.process(f.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),d.hour));a.HH=f.cache(f.process(f.rtoken(/^([0-1][0-9]|2[0-3])/),d.hour));a.m=f.cache(f.process(f.rtoken(/^([0-5][0-9]|[0-9])/),d.minute));a.mm=f.cache(f.process(f.rtoken(/^[0-5][0-9]/),d.minute));
a.s=f.cache(f.process(f.rtoken(/^([0-5][0-9]|[0-9])/),d.second));a.ss=f.cache(f.process(f.rtoken(/^[0-5][0-9]/),d.second));a["ss.s"]=f.cache(f.process(f.rtoken(/^[0-5][0-9]\.[0-9]{1,3}/),d.secondAndMillisecond));a.hms=f.cache(f.sequence([a.H,a.m,a.s],a.timePartDelimiter));a.t=f.cache(f.process(a.ctoken2("shortMeridian"),d.meridian));a.tt=f.cache(f.process(a.ctoken2("longMeridian"),d.meridian));a.z=f.cache(f.process(f.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/),d.timezone));a.zz=f.cache(f.process(f.rtoken(/^((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d\:?\d\d)/),
d.timezone));a.zzz=f.cache(f.process(a.ctoken2("timezone"),d.timezone));a.timeSuffix=f.each(f.ignore(a.whiteSpace),f.set([a.tt,a.zzz]));a.time=f.each(f.optional(f.ignore(f.stoken("T"))),a.hms,a.timeSuffix);a.d=f.cache(f.process(f.each(f.rtoken(/^([0-2]\d|3[0-1]|\d)/),f.optional(a.ctoken2("ordinalSuffix"))),d.day));a.dd=f.cache(f.process(f.each(f.rtoken(/^([0-2]\d|3[0-1])/),f.optional(a.ctoken2("ordinalSuffix"))),d.day));a.ddd=a.dddd=f.cache(f.process(a.ctoken("sun mon tue wed thu fri sat"),function(a){return function(){this.weekday=
a}}));a.M=f.cache(f.process(f.rtoken(/^(1[0-2]|0\d|\d)/),d.month));a.MM=f.cache(f.process(f.rtoken(/^(1[0-2]|0\d)/),d.month));a.MMM=a.MMMM=f.cache(f.process(a.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),d.month));a.y=f.cache(f.process(f.rtoken(/^(\d\d?)/),d.year));a.yy=f.cache(f.process(f.rtoken(/^(\d\d)/),d.year));a.yyy=f.cache(f.process(f.rtoken(/^(\d\d?\d?\d?)/),d.year));a.yyyy=f.cache(f.process(f.rtoken(/^(\d\d\d\d)/),d.year));b=function(){return f.each(f.any.apply(null,arguments),
f.not(a.ctoken2("timeContext")))};a.day=b(a.d,a.dd);a.month=b(a.M,a.MMM);a.year=b(a.yyyy,a.yy);a.orientation=f.process(a.ctoken("past future"),function(a){return function(){this.orient=a}});a.operator=f.process(a.ctoken("add subtract"),function(a){return function(){this.operator=a}});a.rday=f.process(a.ctoken("yesterday tomorrow today now"),d.rday);a.unit=f.process(a.ctoken("second minute hour day week month year"),function(a){return function(){this.unit=a}});a.value=f.process(f.rtoken(/^\d\d?(st|nd|rd|th)?/),
function(a){return function(){this.value=a.replace(/\D/g,"")}});a.expression=f.set([a.rday,a.operator,a.value,a.unit,a.orientation,a.ddd,a.MMM]);b=function(){return f.set(arguments,a.datePartDelimiter)};a.mdy=b(a.ddd,a.month,a.day,a.year);a.ymd=b(a.ddd,a.year,a.month,a.day);a.dmy=b(a.ddd,a.day,a.month,a.year);a.date=function(b){return(a[Date.CultureInfo.dateElementOrder]||a.mdy).call(this,b)};a.format=f.process(f.many(f.any(f.process(f.rtoken(/^(dd?d?d?(?!e)|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),
function(b){if(a[b])return a[b];throw g.Parsing.Exception(b);}),f.process(f.rtoken(/^[^dMyhHmstz]+/),function(a){return f.ignore(f.stoken(a))}))),function(a){return f.process(f.each.apply(null,a),d.finishExact)});var e={},m=function(b){e[b]=e[b]||a.format(b)[0];return e[b]};a.allformats=function(a){var b=[];if(a instanceof Array)for(var c=0;c<a.length;c++)b.push(m(a[c]));else b.push(m(a));return b};a.formats=function(a){if(a instanceof Array){for(var b=[],c=0;c<a.length;c++)b.push(m(a[c]));return f.any.apply(null,
b)}return m(a)};a._formats=a.formats('"yyyy-MM-ddTHH:mm:ssZ";yyyy-MM-ddTHH:mm:ss.sz;yyyy-MM-ddTHH:mm:ssZ;yyyy-MM-ddTHH:mm:ssz;yyyy-MM-ddTHH:mm:ss;yyyy-MM-ddTHH:mmZ;yyyy-MM-ddTHH:mmz;yyyy-MM-ddTHH:mm;ddd, MMM dd, yyyy H:mm:ss tt;ddd MMM d yyyy HH:mm:ss zzz;MMddyyyy;ddMMyyyy;Mddyyyy;ddMyyyy;Mdyyyy;dMyyyy;yyyy;Mdyy;dMyy;d'.split(";"));a._start=f.process(f.set([a.date,a.time,a.expression],a.generalDelimiter,a.whiteSpace),d.finish);a.start=function(b){try{var c=a._formats.call({},b);if(0===c[1].length)return c}catch(d){}return a._start.call({},
b)};g._parse||(g._parse=g.parse);g.parse=function(a){var b,c,d=null;if(!a)return null;if(a instanceof Date)return a.clone();4<=a.length&&"0"!==a.charAt(0)&&(b=g.Parsing.ISO.parse(a)||g.Parsing.Numeric.parse(a));if(b instanceof Date&&!isNaN(b.getTime()))return b;a=(b=a.match(/\b(\d+)(?:st|nd|rd|th)\b/))&&2===b.length?a.replace(b[0],b[1]):a;a=g.Parsing.Normalizer.parse(a);try{d=g.Grammar.start.call({},a.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1"))}catch(e){return null}b=0===d[1].length?d[0]:null;if(null!==
b)return b;try{return(c=Date._parse(a))||0===c?new Date(c):null}catch(f){return null}};Date.getParseFunction=function(a){var b=Date.Grammar.allformats(a);return function(a){for(var c=null,d=0;d<b.length;d++){try{c=b[d].call({},a)}catch(e){continue}if(0===c[1].length)return c[0]}return null}};g.parseExact=function(a,b){return g.getParseFunction(b)(a)}})();
(function(){var g=Date,h=g.prototype,f=Number.prototype;h._orient=1;h._nth=null;h._is=!1;h._same=!1;h._isSecond=!1;f._dateElement="days";h.next=function(){this._move=!0;this._orient=1;return this};g.next=function(){return g.today().next()};h.last=h.prev=h.previous=function(){this._move=!0;this._orient=-1;return this};g.last=g.prev=g.previous=function(){return g.today().last()};h.is=function(){this._is=!0;return this};h.same=function(){this._same=!0;this._isSecond=!1;return this};h.today=function(){return this.same().day()};
h.weekday=function(){return this._nth?m("Weekday").call(this):this._move?this.addWeekdays(this._orient):this._is?(this._is=!1,!this.is().sat()&&!this.is().sun()):!1};h.weekend=function(){return this._is?(this._is=!1,this.is().sat()||this.is().sun()):!1};h.at=function(a){return"string"===typeof a?g.parse(this.toString("d")+" "+a):this.set(a)};f.fromNow=f.after=function(a){var b={};b[this._dateElement]=this;return(a?a.clone():new Date).add(b)};f.ago=f.before=function(a){var b={};b["s"!==this._dateElement[this._dateElement.length-
1]?this._dateElement+"s":this._dateElement]=-1*this;return(a?a.clone():new Date).add(b)};var a="sunday monday tuesday wednesday thursday friday saturday".split(/\s/),d="january february march april may june july august september october november december".split(/\s/),b="Millisecond Second Minute Hour Day Week Month Year Quarter Weekday".split(/\s/),c="Milliseconds Seconds Minutes Hours Date Week Month FullYear Quarter".split(/\s/),e="final first second third fourth fifth".split(/\s/);h.toObject=function(){for(var a=
{},d=0;d<b.length;d++)this["get"+c[d]]&&(a[b[d].toLowerCase()]=this["get"+c[d]]());return a};g.fromObject=function(a){a.week=null;return Date.today().set(a)};for(var m=function(a){return function(){if(this._is)return this._is=!1,this.getDay()===a;this._move&&(this._move=null);if(null!==this._nth){this._isSecond&&this.addSeconds(-1*this._orient);this._isSecond=!1;var b=this._nth;this._nth=null;var c=this.clone().moveToLastDayOfMonth();this.moveToNthOccurrence(a,b);if(this>c)throw new RangeError(g.getDayName(a)+
" does not occur "+b+" times in the month of "+g.getMonthName(c.getMonth())+" "+c.getFullYear()+".");return this}return this.moveToDayOfWeek(a,this._orient)}},k=function(a){return function(){var b=g.today(),c=a-b.getDay();0===a&&1===Date.CultureInfo.firstDayOfWeek&&0!==b.getDay()&&(c+=7);return b.addDays(c)}},l=0;l<a.length;l++)g[a[l].toUpperCase()]=g[a[l].toUpperCase().substring(0,3)]=l,g[a[l]]=g[a[l].substring(0,3)]=k(l),h[a[l]]=h[a[l].substring(0,3)]=m(l);a=function(a){return function(){return this._is?
(this._is=!1,this.getMonth()===a):this.moveToMonth(a,this._orient)}};k=function(a){return function(){return g.today().set({month:a,day:1})}};for(l=0;l<d.length;l++)g[d[l].toUpperCase()]=g[d[l].toUpperCase().substring(0,3)]=l,g[d[l]]=g[d[l].substring(0,3)]=k(l),h[d[l]]=h[d[l].substring(0,3)]=a(l);a=function(a){return function(c){if(this._isSecond)return this._isSecond=!1,this;if(this._same){this._same=this._is=!1;var d=this.toObject();c=(c||new Date).toObject();for(var e="",f=a.toLowerCase(),f="s"===
f[f.length-1]?f.substring(0,f.length-1):f,g=b.length-1;-1<g;g--){e=b[g].toLowerCase();if(d[e]!==c[e])return!1;if(f===e)break}return!0}"s"!==a.substring(a.length-1)&&(a+="s");this._move&&(this._move=null);return this["add"+a](this._orient)}};k=function(a){return function(){this._dateElement=a;return this}};for(l=0;l<b.length;l++)d=b[l].toLowerCase(),"weekday"!==d&&(h[d]=h[d+"s"]=a(b[l]),f[d]=f[d+"s"]=k(d+"s"));h._ss=a("Second");f=function(a){return function(b){if(this._same)return this._ss(b);if(b||
0===b)return this.moveToNthOccurrence(b,a);this._nth=a;return 2!==a||void 0!==b&&null!==b?this:(this._isSecond=!0,this.addSeconds(this._orient))}};for(d=0;d<e.length;d++)h[e[d]]=0===d?f(-1):f(d)})();
(function(){var g=Date,h=g.prototype,f=[],a=function(a,b){b||(b=2);return("000"+a).slice(-1*b)};g.normalizeFormat=function(a){return a};g.strftime=function(a,b){return(new Date(1E3*b)).$format(a)};g.strtotime=function(a){a=g.parse(a);a.addMinutes(-1*a.getTimezoneOffset());return Math.round(g.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.getUTCMilliseconds())/1E3)};h.$format=function(d){var b=this,c,e=function(a,c){f.push(a);return b.toString(a,
c)};return d?d.replace(/(%|\\)?.|%%/g,function(d){if("\\"===d.charAt(0)||"%%"===d.substring(0,2))return d.replace("\\","").replace("%%","%");switch(d){case "d":case "%d":return e("dd");case "D":case "%a":return e("ddd");case "j":case "%e":return e("d",!0);case "l":case "%A":return e("dddd");case "N":case "%u":return b.getDay()+1;case "S":return e("S");case "w":case "%w":return b.getDay();case "z":return b.getOrdinalNumber();case "%j":return a(b.getOrdinalNumber(),3);case "%U":d=b.clone().set({month:0,
day:1}).addDays(-1).moveToDayOfWeek(0);var h=b.clone().addDays(1).moveToDayOfWeek(0,-1);return h<d?"00":a((h.getOrdinalNumber()-d.getOrdinalNumber())/7+1);case "W":case "%V":return b.getISOWeek();case "%W":return a(b.getWeek());case "F":case "%B":return e("MMMM");case "m":case "%m":return e("MM");case "M":case "%b":case "%h":return e("MMM");case "n":return e("M");case "t":return g.getDaysInMonth(b.getFullYear(),b.getMonth());case "L":return g.isLeapYear(b.getFullYear())?1:0;case "o":case "%G":return b.setWeek(b.getISOWeek()).toString("yyyy");
case "%g":return b.$format("%G").slice(-2);case "Y":case "%Y":return e("yyyy");case "y":case "%y":return e("yy");case "a":case "%p":return e("tt").toLowerCase();case "A":return e("tt").toUpperCase();case "g":case "%I":return e("h");case "G":return e("H");case "h":return e("hh");case "H":case "%H":return e("HH");case "i":case "%M":return e("mm");case "s":case "%S":return e("ss");case "u":return a(b.getMilliseconds(),3);case "I":return b.isDaylightSavingTime()?1:0;case "O":return b.getUTCOffset();case "P":return c=
b.getUTCOffset(),c.substring(0,c.length-2)+":"+c.substring(c.length-2);case "e":case "T":case "%z":case "%Z":return b.getTimezone();case "Z":return-60*b.getTimezoneOffset();case "B":return d=new Date,Math.floor((3600*d.getHours()+60*d.getMinutes()+d.getSeconds()+60*(d.getTimezoneOffset()+60))/86.4);case "c":return b.toISOString().replace(/\"/g,"");case "U":return g.strtotime("now");case "%c":return e("d")+" "+e("t");case "%C":return Math.floor(b.getFullYear()/100+1);case "%D":return e("MM/dd/yy");
case "%n":return"\\n";case "%t":return"\\t";case "%r":return e("hh:mm tt");case "%R":return e("H:mm");case "%T":return e("H:mm:ss");case "%x":return e("d");case "%X":return e("t");default:return f.push(d),d}}):this._toString()};h.format||(h.format=h.$format)})();
var TimeSpan=function(g,h,f,a,d){for(var b="days hours minutes seconds milliseconds".split(/\s+/),c=function(a){return function(){return this[a]}},e=function(a){return function(b){this[a]=b;return this}},m=0;m<b.length;m++){var k=b[m],l=k.slice(0,1).toUpperCase()+k.slice(1);TimeSpan.prototype[k]=0;TimeSpan.prototype["get"+l]=c(k);TimeSpan.prototype["set"+l]=e(k)}4===arguments.length?(this.setDays(g),this.setHours(h),this.setMinutes(f),this.setSeconds(a)):5===arguments.length?(this.setDays(g),this.setHours(h),
this.setMinutes(f),this.setSeconds(a),this.setMilliseconds(d)):1===arguments.length&&"number"===typeof g&&(b=0>g?-1:1,this.setMilliseconds(Math.abs(g)),this.setDays(Math.floor(this.getMilliseconds()/864E5)*b),this.setMilliseconds(this.getMilliseconds()%864E5),this.setHours(Math.floor(this.getMilliseconds()/36E5)*b),this.setMilliseconds(this.getMilliseconds()%36E5),this.setMinutes(Math.floor(this.getMilliseconds()/6E4)*b),this.setMilliseconds(this.getMilliseconds()%6E4),this.setSeconds(Math.floor(this.getMilliseconds()/
1E3)*b),this.setMilliseconds(this.getMilliseconds()%1E3),this.setMilliseconds(this.getMilliseconds()*b));this.getTotalMilliseconds=function(){return 864E5*this.getDays()+36E5*this.getHours()+6E4*this.getMinutes()+1E3*this.getSeconds()};this.compareTo=function(a){var b=new Date(1970,1,1,this.getHours(),this.getMinutes(),this.getSeconds());a=null===a?new Date(1970,1,1,0,0,0):new Date(1970,1,1,a.getHours(),a.getMinutes(),a.getSeconds());return b<a?-1:b>a?1:0};this.equals=function(a){return 0===this.compareTo(a)};
this.add=function(a){return null===a?this:this.addSeconds(a.getTotalMilliseconds()/1E3)};this.subtract=function(a){return null===a?this:this.addSeconds(-a.getTotalMilliseconds()/1E3)};this.addDays=function(a){return new TimeSpan(this.getTotalMilliseconds()+864E5*a)};this.addHours=function(a){return new TimeSpan(this.getTotalMilliseconds()+36E5*a)};this.addMinutes=function(a){return new TimeSpan(this.getTotalMilliseconds()+6E4*a)};this.addSeconds=function(a){return new TimeSpan(this.getTotalMilliseconds()+
1E3*a)};this.addMilliseconds=function(a){return new TimeSpan(this.getTotalMilliseconds()+a)};this.get12HourHour=function(){return 12<this.getHours()?this.getHours()-12:0===this.getHours()?12:this.getHours()};this.getDesignator=function(){return 12>this.getHours()?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator};this.toString=function(a){this._toString=function(){return null!==this.getDays()&&0<this.getDays()?this.getDays()+"."+this.getHours()+":"+this.p(this.getMinutes())+":"+this.p(this.getSeconds()):
this.getHours()+":"+this.p(this.getMinutes())+":"+this.p(this.getSeconds())};this.p=function(a){return 2>a.toString().length?"0"+a:a};var b=this;return a?a.replace(/dd?|HH?|hh?|mm?|ss?|tt?/g,function(a){switch(a){case "d":return b.getDays();case "dd":return b.p(b.getDays());case "H":return b.getHours();case "HH":return b.p(b.getHours());case "h":return b.get12HourHour();case "hh":return b.p(b.get12HourHour());case "m":return b.getMinutes();case "mm":return b.p(b.getMinutes());case "s":return b.getSeconds();
case "ss":return b.p(b.getSeconds());case "t":return(12>b.getHours()?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator).substring(0,1);case "tt":return 12>b.getHours()?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator}}):this._toString()};return this};Date.prototype.getTimeOfDay=function(){return new TimeSpan(0,this.getHours(),this.getMinutes(),this.getSeconds(),this.getMilliseconds())};
var TimePeriod=function(g,h,f,a,d,b,c){for(var e="years months days hours minutes seconds milliseconds".split(/\s+/),m=function(a){return function(){return this[a]}},k=function(a){return function(b){this[a]=b;return this}},l=0;l<e.length;l++){var n=e[l],q=n.slice(0,1).toUpperCase()+n.slice(1);TimePeriod.prototype[n]=0;TimePeriod.prototype["get"+q]=m(n);TimePeriod.prototype["set"+q]=k(n)}if(7===arguments.length)this.years=g,this.months=h,this.setDays(f),this.setHours(a),this.setMinutes(d),this.setSeconds(b),
this.setMilliseconds(c);else if(2===arguments.length&&arguments[0]instanceof Date&&arguments[1]instanceof Date){e=g.clone();m=h.clone();k=e.clone();l=e>m?-1:1;this.years=m.getFullYear()-e.getFullYear();k.addYears(this.years);1===l?k>m&&0!==this.years&&this.years--:k<m&&0!==this.years&&this.years++;e.addYears(this.years);if(1===l)for(;e<m&&e.clone().addMonths(1)<=m;)e.addMonths(1),this.months++;else for(;e>m&&e.clone().addDays(-e.getDaysInMonth())>m;)e.addMonths(-1),this.months--;e=m-e;0!==e&&(e=new TimeSpan(e),
this.setDays(e.getDays()),this.setHours(e.getHours()),this.setMinutes(e.getMinutes()),this.setSeconds(e.getSeconds()),this.setMilliseconds(e.getMilliseconds()))}return this};
//var str = "monday-Thursday 9:00 PM - 12:00 PM, Tue 11:00 PM - 12:00 PM, Wednesday 10:00 PM - 12:00 PM"; // PASS
//var str = "Mon 6 am - 8 pm"; // PASS
//var str = "Mon-Fri 6 am - 8 pm"; // PASS
//var str = "Mon, Wed, Fri 9 pm - 12 pm"; // PASS
//var str = "Mon-Thu, Sun 11 am - 8 pm"; // PASS
//var str = "Monday 10:00 PM - 12:00 PM, Tuesday 11:00 PM - 11:30 PM, Wednesday 10:00 PM - 12:00 PM"; // PASS
//var str = "Mon-Fri 10am-10pm, Sat 10am-1am, Sun 9am-10am, some random text"; // PASS
//var str = "Mon-Fri 10am-10pm, don't break the days, Sat 10am-1am, Sun 9am-10am, some random text"; // PASS
//var str = "Mon-Fri 10am-10pm, !@#$%^&U* Sat 10am-1am, Sun 9am-10am, some random text"; // PASS
//var str = "mon 11:00am-12:00am, tue 11:00am-12:00am, wed 11:00am-02:00pm"; // PASS
//var str = "monday 11:00-21:00, tuesday 11:00-21:00, wednesday 11:00-21:00";// PASS
//var str = "mon 11:00am-8:00pm;tue 11:00am-8:30pm;wed 11:00am-8:30pm;thu 11:00am-8:30pm;"; // FAILED
var str = "monday-Thursday 10:00 PM - 11:00 PM, Tue 10:00 PM - 12:00 PM, Wednesday 10:00 PM - 12:00 PM"; // PASS
// Some useful variables.
var splitter = '$';
var short_days = new Array('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun');
var long_days = new Array('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday');
var open_name_days = {}; // Place to store business hours object.
// Make text all lower case and remove white space.
var str = str.toLowerCase().replace(/\s/g, '');
// Match and replace any day abbreviations. Will match until non A-Z character.
var regex_days = /(mon|tue|wed|thu|fri|sat|sun).*?(?=[^a-z])/g;
var match;
while ((match = regex_days.exec(str)) !== null) {
var match_day = short_days.indexOf(match[1]); // Returns a regex short_day.
str = str.replace(match[0], long_days[match_day] + splitter); // Replace short_days with long_days in string.
}
// Replace any indicator for interval with + signs, which represent 'to'. Indicator will be assumed anything between start_day and end_day.
//str = str.replace(/-/g, '+');
// Split days by characters
var days = str.split(/[,;]/);
console.log(days);
console.log('');
// Loop through each day.
var len = days.length;
for (var i = 0; i < len; i++) {
if (!days[i]) continue;
var day = days[i].trim();
console.log('Day: ' + day);
// Find the start and end day. Will match until not A-Z character.
var regex_day = /(monday|tuesday|wednesday|thursday|friday|saturday|sunday).*?(?![a-z])/g;
// Something broke, so continue onto next day. This is likely caused by random text not containing a day.
if (!day.match(regex_day)) console.log('Something broke with regex_day');
if (!day.match(regex_day)) continue;
// Regex start_day and end_day from day.
var start_day = day.match(regex_day)[0];
var end_day = day.match(regex_day)[1];
end_day = ((end_day) ? end_day : start_day);
// Get indexes of start_day and end_day to be used later for days range.
var start_day_index = long_days.indexOf(start_day);
var end_day_index = long_days.indexOf(end_day);
console.log('start_day: [' + start_day_index + '] ' + start_day);
console.log('end_day: [' + end_day_index + '] ' + end_day);
// Detect times from day string.
var regex_time = /(\d\d:\d\d|\d{1,2})(am|pm)?/g;
// Regex time from this day string, fallback to string before split.
var time_match = day.match(regex_time);
// Something broke, this is likely caused by no time information. Attempt to retrieve it from string.
if (!time_match) {
time_match = str.match(regex_time);
if (!time_match) continue; // Unrecoverable at this point, continue onto next day.
}
var start_time = time_match[0];
var end_time = time_match[1];
// Parse time from Date.js.
start_time = new Date.parse(start_time).toString('h:mm tt');
end_time = new Date.parse(end_time).toString('h:mm tt');
console.log('start_time: ' + start_time);
console.log('end_time: ' + end_time);
console.log('');
// Loop through days range and output to object.
var len = short_days.length;
for (var b = 0; b < len; b++) {
if ((b >= start_day_index) && (b <= end_day_index)) {
var open_day_name_hour = short_days[b] + "_open";
var close_day_name_hour = short_days[b] + "_close";
open_name_days[open_day_name_hour] = start_time;
open_name_days[close_day_name_hour] = end_time;
}
}
}
console.log(open_name_days);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment