2025-11-15 18:58:30 +00:00
|
|
|
import { DateExpressionLexer } from "../text/lexer/DateExpressionLexer";
|
|
|
|
|
import { LexerQuery } from "../text/lexer/LexerQuery";
|
|
|
|
|
|
2025-03-25 06:42:27 +00:00
|
|
|
export class DateHelper
|
|
|
|
|
{
|
|
|
|
|
static now()
|
|
|
|
|
{
|
|
|
|
|
let date = new Date();
|
|
|
|
|
|
|
|
|
|
return date;
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-10 17:41:48 +00:00
|
|
|
static nowMS()
|
|
|
|
|
{
|
|
|
|
|
return this.now().getTime();
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-25 06:42:27 +00:00
|
|
|
static today()
|
|
|
|
|
{
|
|
|
|
|
let date = new Date();
|
|
|
|
|
date.setHours( 0, 0, 0 );
|
|
|
|
|
|
|
|
|
|
return date;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static createYMD( year:number, month:number = 1, day:number = 1, hours:number = 0, minutes:number = 0, seconds:number = 0 )
|
|
|
|
|
{
|
|
|
|
|
let date = new Date();
|
|
|
|
|
|
|
|
|
|
date.setFullYear( year );
|
|
|
|
|
date.setMonth( month - 1 );
|
|
|
|
|
date.setDate( day );
|
|
|
|
|
date.setHours( hours, minutes, seconds );
|
|
|
|
|
|
|
|
|
|
return date;
|
|
|
|
|
}
|
2025-11-15 18:58:30 +00:00
|
|
|
|
|
|
|
|
static parseDateExpression( expression:string ):Date
|
|
|
|
|
{
|
|
|
|
|
let query = LexerQuery.from( expression, new DateExpressionLexer() );
|
|
|
|
|
|
|
|
|
|
let now = query.find( le => le.isMatcher( DateExpressionLexer.Now ) );
|
|
|
|
|
|
|
|
|
|
if ( now )
|
|
|
|
|
{
|
|
|
|
|
return DateHelper.now();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let time = query.find( le => le.isMatcher( DateExpressionLexer.Time ) );
|
|
|
|
|
let hourMinutesSeconds = ( time?.match || "9:00" ).split( ":" ).map( s => parseInt( s ) );
|
|
|
|
|
|
|
|
|
|
let hours = hourMinutesSeconds[ 0 ];
|
|
|
|
|
let minutes = hourMinutesSeconds[ 1 ];
|
|
|
|
|
let seconds = hourMinutesSeconds.length == 3 ? hourMinutesSeconds[ 2 ] : 0;
|
|
|
|
|
|
|
|
|
|
let year = DateHelper.now().getFullYear();
|
|
|
|
|
let month = DateHelper.now().getMonth();
|
|
|
|
|
let day = DateHelper.now().getDate();
|
|
|
|
|
|
|
|
|
|
let date = query.find( le => /date/i.test( le.type ) );
|
|
|
|
|
|
|
|
|
|
if ( date )
|
|
|
|
|
{
|
|
|
|
|
let seperator = /slash/i.test( date.type ) ? "/" : /dot/i.test( date.type ) ? "." : "-";
|
|
|
|
|
|
|
|
|
|
let values = date.match.replace( /(\/|\.|\-)$/, "" ).split( seperator ).map( s => parseInt( s ) );
|
|
|
|
|
|
|
|
|
|
if ( /reverse/i.test( date.type ) )
|
|
|
|
|
{
|
|
|
|
|
year = values[ 0 ];
|
|
|
|
|
month = values[ 1 ] - 1;
|
|
|
|
|
day = values[ 2 ];
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
day = values[ 0 ];
|
|
|
|
|
month = values[ 1 ] - 1;
|
|
|
|
|
|
|
|
|
|
if ( values.length == 3 )
|
|
|
|
|
{
|
|
|
|
|
year = values[ 2 ];
|
|
|
|
|
|
|
|
|
|
if ( year < 100 )
|
|
|
|
|
{
|
|
|
|
|
year += 2000;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return DateHelper.createYMD( year, month, day, hours, minutes, seconds );
|
|
|
|
|
|
|
|
|
|
}
|
2025-03-25 06:42:27 +00:00
|
|
|
}
|