/** * WordPress dependencies */ import { dateI18n, getSettings } from '@safe-wordpress/date'; /** * External dependencies */ import moment, { Moment } from 'moment'; export { date, format, getDate, getSettings, isInTheFuture, } from '@safe-wordpress/date'; export function formatI18nDate( d: string | Date | Moment ): string { const settings = getSettings(); return dateI18n( settings.formats.date, d ); } export function formatI18nDatetime( d: string | Date ): string { const settings = getSettings(); return dateI18n( settings.formats.datetimeAbbreviated, d ); } export function getLocale(): string { const settings = getSettings(); return settings.l10n.locale; } export function formatDateToUtc( d: string ): string { if ( d.endsWith( 'Z' ) ) { return d; } if ( /[+-][0-9]{2}:?[0-9]{2}$/.test( d ) ) { return moment( d ).toISOString(); } const settings = getSettings(); const offset = fixTimezoneOffsetForMoment( Number.parseFloat( `${ settings.timezone.offset }` ) ); return moment( d + offset ).toISOString(); } // ======= // HELPERS // ======= function fixTimezoneOffsetForMoment( offset: number ) { const hours = Math.floor( Math.abs( offset ) ); const decs = Math.abs( offset ) - hours; const mins = Math.round( 60 * decs ); const strHours = `${ hours }`.padStart( 2, '0' ); const strMins = `${ mins }`.padStart( 2, '0' ); const sign = 0 <= offset ? '+' : '-'; return `${ sign }${ strHours }${ strMins }`; }