Combined adjustTz into formatDate
Some checks failed
Build / Tag Version (push) Has been cancelled
Build / Publish Documentation (push) Has been cancelled
Build / Build NPM Project (push) Has been cancelled

This commit is contained in:
Zakary Timson 2024-11-20 10:56:51 -05:00
parent 0fb1e13ba0
commit 87db4d4755
3 changed files with 52 additions and 19 deletions

View File

@ -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>

View File

@ -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",

View File

@ -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]);
} }
/** /**