|
|
@ -20,12 +20,6 @@ export function adjustedInterval(cb: Function, ms: number) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export function adjustTz(date: Date, offset: number) {
|
|
|
|
|
|
|
|
const currentOffset = date.getTimezoneOffset();
|
|
|
|
|
|
|
|
offset = currentOffset - offset * 60;
|
|
|
|
|
|
|
|
return new Date(date.getTime() + offset * 60000);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Format date
|
|
|
|
* Format date
|
|
|
|
*
|
|
|
|
*
|
|
|
@ -34,8 +28,43 @@ export function adjustTz(date: Date, offset: number) {
|
|
|
|
* @param tz Override timezone, can be either string or number
|
|
|
|
* @param tz Override timezone, can be either string or number
|
|
|
|
* @return {string} Formated date
|
|
|
|
* @return {string} Formated date
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
export function formatDate(date: Date | number | string, format = 'YYYY-MM-DD H:mm', tz?: any): string {
|
|
|
|
export function formatDate(date: Date | number | string, format = 'YYYY-MM-DD H:mm', tz?: string | number): string {
|
|
|
|
if(typeof date == 'number' || typeof date == 'string') date = new Date(date);
|
|
|
|
const timezones = [
|
|
|
|
|
|
|
|
['IDLW', -12],
|
|
|
|
|
|
|
|
['SST', -11],
|
|
|
|
|
|
|
|
['HST', -10],
|
|
|
|
|
|
|
|
['AKST', -9],
|
|
|
|
|
|
|
|
['PST', -8],
|
|
|
|
|
|
|
|
['MST', -7],
|
|
|
|
|
|
|
|
['CST', -6],
|
|
|
|
|
|
|
|
['EST', -5],
|
|
|
|
|
|
|
|
['AST', -4],
|
|
|
|
|
|
|
|
['BRT', -3],
|
|
|
|
|
|
|
|
['MAT', -2],
|
|
|
|
|
|
|
|
['AZOT', -1],
|
|
|
|
|
|
|
|
['UTC', 0],
|
|
|
|
|
|
|
|
['CET', 1],
|
|
|
|
|
|
|
|
['EET', 2],
|
|
|
|
|
|
|
|
['MSK', 3],
|
|
|
|
|
|
|
|
['AST', 4],
|
|
|
|
|
|
|
|
['PKT', 5],
|
|
|
|
|
|
|
|
['IST', 5.5],
|
|
|
|
|
|
|
|
['BST', 6],
|
|
|
|
|
|
|
|
['ICT', 7],
|
|
|
|
|
|
|
|
['CST', 8],
|
|
|
|
|
|
|
|
['JST', 9],
|
|
|
|
|
|
|
|
['AEST', 10],
|
|
|
|
|
|
|
|
['SBT', 11],
|
|
|
|
|
|
|
|
['FJT', 12],
|
|
|
|
|
|
|
|
['TOT', 13],
|
|
|
|
|
|
|
|
['LINT', 14]
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function adjustTz(date: Date, gmt: number) {
|
|
|
|
|
|
|
|
const currentOffset = date.getTimezoneOffset();
|
|
|
|
|
|
|
|
const adjustedOffset = gmt * 60;
|
|
|
|
|
|
|
|
return new Date(date.getTime() + (adjustedOffset + currentOffset) * 60000);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function day(num: number): string {
|
|
|
|
function day(num: number): string {
|
|
|
|
switch(num) {
|
|
|
|
switch(num) {
|
|
|
@ -89,10 +118,14 @@ export function formatDate(date: Date | number | string, format = 'YYYY-MM-DD H:
|
|
|
|
return (offset > 0 ? '-' : '') + `${hours}:${minutes.toString().padStart(2, '0')}`;
|
|
|
|
return (offset > 0 ? '-' : '') + `${hours}:${minutes.toString().padStart(2, '0')}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function timezone(date: Date): string {
|
|
|
|
if(typeof date == 'number' || typeof date == 'string') date = new Date(date);
|
|
|
|
return new Intl.DateTimeFormat('en-US', {timeZoneName: 'short'})
|
|
|
|
|
|
|
|
.format(date).split(' ').pop() || '';
|
|
|
|
// Handle timezones
|
|
|
|
}
|
|
|
|
let t!: [string, number];
|
|
|
|
|
|
|
|
if(tz == null) tz = -(date.getTimezoneOffset() / 60);
|
|
|
|
|
|
|
|
t = <any>timezones.find(t => isNaN(<any>tz) ? t[0] == tz : t[1] == tz);
|
|
|
|
|
|
|
|
if(!t) throw new Error(`Unknown timezone: ${tz}`);
|
|
|
|
|
|
|
|
date = adjustTz(date, t[1]);
|
|
|
|
|
|
|
|
|
|
|
|
return format
|
|
|
|
return format
|
|
|
|
// Year
|
|
|
|
// Year
|
|
|
@ -100,7 +133,7 @@ export function formatDate(date: Date | number | string, format = 'YYYY-MM-DD H:
|
|
|
|
.replaceAll('YY', date.getFullYear().toString().slice(2))
|
|
|
|
.replaceAll('YY', date.getFullYear().toString().slice(2))
|
|
|
|
// Month
|
|
|
|
// Month
|
|
|
|
.replaceAll('MMMM', month(date.getMonth()))
|
|
|
|
.replaceAll('MMMM', month(date.getMonth()))
|
|
|
|
.replaceAll('MMM', month(date.getMonth()).slice(0, 2))
|
|
|
|
.replaceAll('MMM', month(date.getMonth()).slice(0, 3))
|
|
|
|
.replaceAll('MM', (date.getMonth() + 1).toString().padStart(2, '0'))
|
|
|
|
.replaceAll('MM', (date.getMonth() + 1).toString().padStart(2, '0'))
|
|
|
|
.replaceAll('M', (date.getMonth() + 1).toString())
|
|
|
|
.replaceAll('M', (date.getMonth() + 1).toString())
|
|
|
|
// Day
|
|
|
|
// Day
|
|
|
@ -131,9 +164,9 @@ export function formatDate(date: Date | number | string, format = 'YYYY-MM-DD H:
|
|
|
|
.replaceAll('A', date.getHours() >= 12 ? 'PM' : 'AM')
|
|
|
|
.replaceAll('A', date.getHours() >= 12 ? 'PM' : 'AM')
|
|
|
|
.replaceAll('a', date.getHours() >= 12 ? 'pm' : 'am')
|
|
|
|
.replaceAll('a', date.getHours() >= 12 ? 'pm' : 'am')
|
|
|
|
// Timezone
|
|
|
|
// Timezone
|
|
|
|
.replaceAll('ZZ', tzOffset(isNaN(tz) ? date.getTimezoneOffset() : tz).replace(':', ''))
|
|
|
|
.replaceAll('ZZ', tzOffset(t[1] * 60).replace(':', ''))
|
|
|
|
.replaceAll('Z', tzOffset(isNaN(tz) ? date.getTimezoneOffset() : tz))
|
|
|
|
.replaceAll('Z', tzOffset(t[1] * 60))
|
|
|
|
.replaceAll('z', typeof tz == 'string' ? tz : timezone(date));
|
|
|
|
.replaceAll('z', typeof tz == 'string' ? tz : (<any>t)[0]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|