mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
@@ -0,0 +1,53 @@
|
||||
/***********************************************************************************************************************************************************************
|
||||
* File Name: datetime.util.js
|
||||
* Type of Program: Utility
|
||||
* Description: Pure date/time formatting helpers for backend use (emails, crons, notifications).
|
||||
*
|
||||
* All functions accept an optional options object: { timezone, locale }
|
||||
* timezone — 'UTC' (default) | 'local' (server's local timezone)
|
||||
* locale — BCP 47 tag, defaults to 'en-US'
|
||||
*
|
||||
* UTC is the default because emails and cron output must be unambiguous regardless
|
||||
* of where the server runs. Pass { timezone: 'local' } only when displaying times
|
||||
* relative to the server's configured locale (e.g. admin dashboards, server logs).
|
||||
***********************************************************************************************************************************************************************/
|
||||
|
||||
function tzOpt(timezone) {
|
||||
return timezone === 'local' ? {} : { timeZone: 'UTC' };
|
||||
}
|
||||
|
||||
function loc(locale) {
|
||||
return locale ?? 'en-US';
|
||||
}
|
||||
|
||||
/** "June 27, 2026" */
|
||||
function fmtDate(value, { timezone = 'UTC', locale } = {}) {
|
||||
if (!value) return '—';
|
||||
return new Date(value).toLocaleDateString(loc(locale), {
|
||||
month: 'long', day: 'numeric', year: 'numeric',
|
||||
...tzOpt(timezone),
|
||||
});
|
||||
}
|
||||
|
||||
/** "June 27, 2026, 3:45 PM UTC" */
|
||||
function fmtDateTime(value, { timezone = 'UTC', locale } = {}) {
|
||||
if (!value) return '—';
|
||||
return new Date(value).toLocaleString(loc(locale), {
|
||||
month: 'long', day: 'numeric', year: 'numeric',
|
||||
hour: 'numeric', minute: '2-digit',
|
||||
timeZoneName: 'short',
|
||||
...tzOpt(timezone),
|
||||
});
|
||||
}
|
||||
|
||||
/** "3:45 PM UTC" */
|
||||
function fmtTime(value, { timezone = 'UTC', locale } = {}) {
|
||||
if (!value) return '—';
|
||||
return new Date(value).toLocaleTimeString(loc(locale), {
|
||||
hour: 'numeric', minute: '2-digit',
|
||||
timeZoneName: 'short',
|
||||
...tzOpt(timezone),
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = { fmtDate, fmtDateTime, fmtTime };
|
||||
Reference in New Issue
Block a user