UNPKG

@adaptabletools/adaptable

Version:

Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

57 lines (56 loc) 2.16 kB
import { parseISO, parse } from 'date-fns'; import { DateFormatter } from './FormatHelper'; import { AdaptableLogger } from '../../agGrid/AdaptableLogger'; export const isValidDate = (date) => { return date instanceof Date && !isNaN(date.getTime()); }; /** * Checks if the data contains a value that represents a valid date. * * @param data any kind of data */ export const isValueValidDate = (data) => { if (!data || typeof data === 'boolean') { return false; } const date = new Date(data); return !isNaN(date.getTime()); }; export const dateToISO = (date) => { return DateFormatter(date, { Pattern: 'yyyy-MM-dd' }); }; export const parseToISO = (date, dateFormat) => { const dateInstance = parseDateValue(date, dateFormat); return isValidDate(dateInstance) ? dateToISO(dateInstance) : ''; }; export const parseDateValue = (dateValue, dateFormat) => { if (dateValue == undefined || (typeof dateValue === 'string' && dateValue.trim() === '')) { return undefined; } if (dateValue instanceof Date) { return !isNaN(dateValue.getTime()) ? dateValue : undefined; } let dateInstance; if (typeof dateValue === 'number') { dateInstance = new Date(dateValue); } else { // typeof dateValue === 'string' if (dateFormat) { dateInstance = parse(dateValue, dateFormat, new Date()); } else { dateInstance = parseISO(dateValue); } if (!isValidDate(dateInstance)) { // last chance: try to use the native Date.parse(), https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse dateInstance = new Date(Date.parse(dateValue)); } } if (!isValidDate(dateInstance)) { AdaptableLogger.consoleWarnBase(`Invalid date value "${dateValue}" - cannot be converted to a Date instance. Please make sure you specify adaptableOptions.userInterfaceOptions.dateInputOptions.dateFormat correctly.`); dateInstance = undefined; } return dateInstance; }; export const parseFilterInputDate = (stringDate) => new Date(stringDate);