datetimes
Version:
Extend class of Date
1 lines • 5.67 kB
JavaScript
var ptBR={months:["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezenbro"],days:["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"]},enUS={months:["january","february","march","april","may","june","july","august","september","october","november","december"],days:["sunday","monday","tuesday","wednesday","thursday","friday","saturday"]},esMX={months:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","setiembre","octubre","noviembre","diciembre"],days:["domingo","lunes","martes","miércoles","jueves","virnes","sábado"]},languages={"pt-BR":ptBR,"en-US":enUS,"es-MX":esMX};function DayExpression(t,i,e,n){Expresion.call(this,t,i,e,n),this.oneDigit=function(t){return t.replace(this.dateRx,this.date.getDate().toString())},this.twoDigit=function(t){return t.replace(this.dateRx,this.date.getDate().toString().padStart(2,"0"))},this.threeDigit=function(t){return t.replace(this.dateRx,this.language.days[this.date.getDay()].substr(0,3))},this.fourDigit=function(t){return t.replace(this.dateRx,this.language.days[this.date.getDay()])},this.otherDigit=null}function DayPeriodExpression(t,i,e){Expresion.call(this,t,i,e),this.oneDigit=null,this.twoDigit=function(t){var i=this.date.toLocaleString("en-US",{hour:"numeric",hour12:!0});return t.replace(this.dateRx,i.replace(/[0-9\s]/g,""))},this.threeDigit=null,this.fourDigit=null,this.otherDigit=null}function Expresion(t,i,e){this.dateRx=t,this.date=i,this.language=languages[e],this.interpret=function(t){if(!t.input.length)return;switch(this.dateRx.source.replace("\\b","").length){case 1:this.oneDigit&&(t.input=this.oneDigit(t.input));break;case 2:this.twoDigit&&(t.input=this.twoDigit(t.input));break;case 3:this.threeDigit&&(t.input=this.threeDigit(t.input));break;case 4:this.fourDigit&&(t.input=this.fourDigit(t.input));break;default:this.otherDigit&&(t.input=this.otherDigit(t.input))}t.output=t.input},this.oneDigit=null,this.twoDigit=null,this.threeDigit=null,this.fourDigit=null,this.otherDigit=null}function HourExpression(t,i,e){Expresion.call(this,t,i,e),this.oneDigit=function(t){var i=this.date.toLocaleString("en-US",{hour:"numeric",hour12:!0});return i=i.replace(/ PM/g,"").replace(/ AM/g,""),t.replace(this.dateRx,i.padStart(2,"0"))},this.twoDigit=function(t){var i=this.date.toLocaleString("en-US",{hour:"numeric",hour12:!1});return t.replace(this.dateRx,i.padStart(2,"0"))},this.threeDigit=null,this.fourDigit=null,this.otherDigit=null}function MillisecondExpression(t,i,e){Expresion.call(this,t,i,e),this.oneDigit=null,this.twoDigit=null,this.threeDigit=function(t){return t.replace(this.dateRx,this.date.getMilliseconds().toString().padStart(3,"0"))},this.fourDigit=null,this.otherDigit=null}function MinuteExpression(t,i,e){Expresion.call(this,t,i,e),this.oneDigit=null,this.twoDigit=function(t){return t.replace(this.dateRx,this.date.getMinutes().toString().padStart(2,"0"))},this.threeDigit=null,this.fourDigit=null,this.otherDigit=null}function MonthExpression(t,i,e){Expresion.call(this,t,i,e),this.oneDigit=function(t){return t.replace(this.dateRx,(this.date.getMonth()+1).toString())},this.twoDigit=function(t){return t.replace(this.dateRx,(this.date.getMonth()+1).toString().padStart(2,"0"))},this.threeDigit=function(t){return t.replace(this.dateRx,this.language.months[this.date.getMonth()].substr(0,3))},this.fourDigit=function(t){return t.replace(this.dateRx,this.language.months[this.date.getMonth()])},this.otherDigit=null}function SecondExpression(t,i,e){Expresion.call(this,t,i,e),this.oneDigit=null,this.twoDigit=function(t){return t.replace(this.dateRx,this.date.getSeconds().toString().padStart(2,"0"))},this.threeDigit=null,this.fourDigit=null,this.otherDigit=null}function YearExpression(t,i,e){Expresion.call(this,t,i,e),this.oneDigit=null,this.twoDigit=function(t){return t.replace(this.dateRx,this.date.getFullYear().toString().substr(2))},this.threeDigit=function(t){return t.replace(this.dateRx,this.date.getFullYear().toString().substr(3))},this.fourDigit=function(t){return t.replace(this.dateRx,this.date.getFullYear().toString())},this.otherDigit=null}function formatDatetimes(t,i){var e=new Context(t),n=[];return i=i||"pt-BR",n.push(new MillisecondExpression(/zzz/g,this,i)),n.push(new SecondExpression(/ss/g,this,i)),n.push(new MinuteExpression(/mm/g,this,i)),n.push(new HourExpression(/HH/g,this,i)),n.push(new HourExpression(/h/g,this,i)),n.push(new DayExpression(/dddd/g,this,i)),n.push(new DayExpression(/ddd/g,this,i)),n.push(new DayExpression(/dd/g,this,i)),n.push(new DayExpression(/d\b/g,this,i)),n.push(new MonthExpression(/MMMM/g,this,i)),n.push(new MonthExpression(/MMM/g,this,i)),n.push(new MonthExpression(/MM/g,this,i)),n.push(new MonthExpression(/M\b/g,this,i)),n.push(new YearExpression(/yyyy/g,this,i)),n.push(new YearExpression(/yyy/g,this,i)),n.push(new YearExpression(/yy/g,this,i)),n.push(new DayPeriodExpression(/dp\b/g,this,i)),n.forEach(function(t){t.interpret(e)}),e.output}function noTimeZoneDatetimes(t,i,e,n,s,r,o,a){t|=0,i|=0,e|=0,n|=0,s|=0,r|=0,o|=0,a|=0;var h=new Date(Date.UTC(i,e,n,s,r,o,a));return h=new Date(h.setHours(h.getHours()+t))}function Context(t){this.input=t,this.output=""}function Datetimes(){var t=new(Function.prototype.bind.apply(Date,[Date].concat(Array.prototype.slice.call(arguments))));return t.__proto__=Datetimes.prototype,t}Datetimes.prototype.__proto__=Date.prototype,Datetimes.prototype.format=formatDatetimes,Datetimes.prototype.now=function(){return new Datetimes},Datetimes.prototype.noTimeZone=function(){return new Datetimes(noTimeZoneDatetimes.apply(noTimeZoneDatetimes,arguments))};