UNPKG

puppy-lib-components

Version:

A modern TypeScript React component library with generic UI components and football pickem domain components

106 lines (105 loc) 3.61 kB
export const MONTHS = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; export const WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; export const formatDate = (date, format = 'MM/dd/yyyy') => { if (!date) return ''; const day = date.getDate().toString().padStart(2, '0'); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const year = date.getFullYear(); return format .replace('MM', month) .replace('dd', day) .replace('yyyy', year.toString()) .replace('M', (date.getMonth() + 1).toString()) .replace('d', date.getDate().toString()) .replace('yy', year.toString().slice(-2)); }; export const parseDate = (dateString) => { if (!dateString) return null; // Try different date formats const formats = [ /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/, // MM/dd/yyyy /^(\d{4})-(\d{1,2})-(\d{1,2})$/, // yyyy-MM-dd /^(\d{1,2})-(\d{1,2})-(\d{4})$/, // MM-dd-yyyy ]; for (const format of formats) { const match = dateString.match(format); if (match) { const [, part1, part2, part3] = match; let month, day, year; if (format === formats[0]) { // MM/dd/yyyy month = parseInt(part1) - 1; day = parseInt(part2); year = parseInt(part3); } else if (format === formats[1]) { // yyyy-MM-dd year = parseInt(part1); month = parseInt(part2) - 1; day = parseInt(part3); } else { // MM-dd-yyyy month = parseInt(part1) - 1; day = parseInt(part2); year = parseInt(part3); } const date = new Date(year, month, day); if (!isNaN(date.getTime())) { return date; } } } return null; }; export const getDaysInMonth = (date) => { return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(); }; export const getFirstDayOfMonth = (date) => { return new Date(date.getFullYear(), date.getMonth(), 1).getDay(); }; export const isSameDay = (date1, date2) => { if (!date1 || !date2) return false; return date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate(); }; export const isDateInRange = (date, start, end) => { if (!start || !end) return false; return date >= start && date <= end; }; export const isDateDisabled = (date, minDate, maxDate, disableFuture, disablePast, shouldDisableDate, position = 'start') => { const today = new Date(); today.setHours(0, 0, 0, 0); if (disableFuture && date > today) return true; if (disablePast && date < today) return true; if (minDate && date < minDate) return true; if (maxDate && date > maxDate) return true; if (shouldDisableDate && shouldDisableDate(date, position)) return true; return false; }; export const formatDisplayValue = (value, format) => { if (!value.start && !value.end) return ''; const startStr = formatDate(value.start, format); const endStr = formatDate(value.end, format); if (value.start && value.end) { return `${startStr} - ${endStr}`; } else if (value.start) { return `${startStr} - `; } else if (value.end) { return ` - ${endStr}`; } return ''; };