quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 1.85 kB
JavaScript
import pads from'./pads.js';import timeDay from'../time-intervals/day.js';import utcDay from'../time-intervals/utc/day.js';import{utcMonday}from'../time-intervals/utc/week.js';import{monday as timeMonday}from'../time-intervals/week.js';const PERCENT_CHAR_CODE=37,newYear=a=>({y:a,m:0,d:1,H:0,M:0,S:0,L:0}),utcDate=a=>{if(0<=a.y&&100>a.y){var b=new Date(Date.UTC(-1,a.m,a.d,a.H,a.M,a.S,a.L));return b.setUTCFullYear(a.y),b}return new Date(Date.UTC(a.y,a.m,a.d,a.H,a.M,a.S,a.L))};class TimeParser{constructor(a,b,c){this._specifier=a,this._parses=b,this._newDate=c}parseSpecifier(a,b,d){for(var e,f,g=0,h=this._specifier.length,k=b.length;g<h;){if(d>=k)return-1;if(e=this._specifier.charCodeAt(g++),e===PERCENT_CHAR_CODE){if(e=this._specifier.charAt(g++),f=this._parses[e in pads?this._specifier.charAt(g++):e],!f||0>(d=f(a,b,d)))return-1;}else if(e!==b.charCodeAt(d++))return-1}return d}parse(a){var b,c,e,f=newYear(1900);if(a+='',b=this.parseSpecifier(f,a,0),b!==a.length)return null;if('Q'in f)return new Date(f.Q);if('p'in f&&(f.H=f.H%12+12*f.p),'V'in f){if(1>f.V||53<f.V)return null;'w'in f||(f.w=1),'Z'in f?(c=utcDate(newYear(f.y)),e=c.getUTCDay(),c=4<e||0===e?utcMonday.ceil(c):utcMonday.floor(c),c=utcDay.offset(c,7*(f.V-1)),f.y=c.getUTCFullYear(),f.m=c.getUTCMonth(),f.d=c.getUTCDate()+(f.w+6)%7):(c=this._newDate(newYear(f.y)),e=c.getDay(),c=4<e||0===e?timeMonday.ceil(c):timeMonday.floor(c),c=timeDay.offset(c,7*(f.V-1)),f.y=c.getFullYear(),f.m=c.getMonth(),f.d=c.getDate()+(f.w+6)%7)}else('W'in f||'U'in f)&&('w'in f||('u'in f?f.w=f.u%7:f.w='W'in f?1:0),e='Z'in f?utcDate(newYear(f.y)).getUTCDay():this._newDate(newYear(f.y)).getDay(),f.m=0,f.d='W'in f?(f.w+6)%7+7*f.W-(e+5)%7:f.w+7*f.U-(e+6)%7);return'Z'in f?(f.H+=0|f.Z/100,f.M+=f.Z%100,utcDate(f)):this._newDate(f)}toString(){return this._specifier}}export{utcDate};export default TimeParser;