Combined adjustTz into formatDate
This commit is contained in:
parent
0fb1e13ba0
commit
87db4d4755
@ -6,10 +6,11 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import {adjustTz, formatDate} from './dist/index.mjs';
|
import {formatDate} from './dist/index.mjs';
|
||||||
|
|
||||||
console.log(formatDate(new Date(), 'HH:mm:ss z'));
|
console.log(formatDate(new Date(), 'HH:mm:ss z', 5));
|
||||||
console.log(formatDate(adjustTz(new Date(), 0), 'HH:mm:ss z', 'UTC'));
|
console.log(formatDate(new Date(), 'HH:mm:ss z', 0));
|
||||||
|
console.log(formatDate(new Date(), 'HH:mm:ss z', -5));
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ztimson/utils",
|
"name": "@ztimson/utils",
|
||||||
"version": "0.22.11",
|
"version": "0.23.0",
|
||||||
"description": "Utility library",
|
"description": "Utility library",
|
||||||
"author": "Zak Timson",
|
"author": "Zak Timson",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
62
src/time.ts
62
src/time.ts
@ -20,12 +20,6 @@ export function adjustedInterval(cb: Function, ms: number) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function adjustTz(date: Date, offset: number) {
|
|
||||||
const currentOffset = date.getTimezoneOffset();
|
|
||||||
const adjustedOffset = offset * 60;
|
|
||||||
return new Date(date.getTime() + (currentOffset - adjustedOffset) * 60000);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Format date
|
* Format date
|
||||||
*
|
*
|
||||||
@ -34,8 +28,42 @@ 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],
|
||||||
|
['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 +117,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
|
||||||
@ -131,9 +163,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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user