import { Injectable } from '@angular/core'; import { parse, format } from 'date-fns'; @Injectable({ providedIn: 'root', }) export class MiscHelpersService { constructor() {} parseDateTimeString(isoString: string): { dateString: string; timeString: string; } { if (!isoString) { return { dateString: '', timeString: '12:00am', }; } const date = parse(isoString, 'YYYY-MM-DDT00:00:00.000Z', new Date()); const dateString = format(date, 'YYYY-MM-DDT00:00:00.000Z'); const dateStringDate = new Date(dateString); const offset = dateStringDate.getTimezoneOffset(); if (offset > 0) { dateStringDate.setHours(dateStringDate.getHours() + 12, 0, 0); } return { dateString: dateStringDate.toISOString(), timeString: format(date, 'h:mma'), }; } convertDateTimeToDate(dateTime: Date | string): string { if (!dateTime) { return ''; } if (typeof dateTime === 'string') { return dateTime.substr(0, 10); } const year = dateTime.getFullYear(); const month = dateTime.getMonth() + 1 > 9 ? (dateTime.getMonth() + 1).toString() : `0${dateTime.getMonth() + 1}`; const day = dateTime.getDate() > 9 ? dateTime.getDate().toString() : `0${dateTime.getDate()}`; return `${year}-${month}-${day}`; } // dateString: YYYY-MM-DD convertDateToDateTime(dateString: string): string { if (!dateString) { return dateString; } const date = new Date(`${dateString}T00:00:00.000`); return date.toISOString(); } formatMediumDate(inputDateString: string): string { const date = new Date(inputDateString); return isNaN(+date) ? '' : format(date, 'MMM D, YYYY'); } formatShortDateTime(inputDateString: string): string { const date = new Date(inputDateString); return isNaN(+date) ? '' : format(date, 'M/D/YY, h:mm A'); } formatUSD(price: number): string { if (price === null || isNaN(price)) { return '$0.00'; } return `$${this.formatNumber(price)}`; } formatNumber(num: number): string { if (num === null || isNaN(num)) { return '0.00'; } return `${(Math.round(num * 100) / 100).toFixed(2)}`; } createSearchText(...inputs: Array): string { return inputs.join('\0'); // '\0' is the literal null character } }