ValidateDateService is a service class for validating date components and input formats. It provides methods to validate date parts (year, month, day), validate input format strings, and parse date parts according to a given format, used internally by parseToDate, formatDate, and validateDate to keep their date-part parsing consistent.ts
import { ValidateDateService } from "@arkyn/shared/validateDateService";
validateDateParts(year, month, day)year (required)numbermonth (required)numberday (required)numbertypescript
import { ValidateDateService } from "@arkyn/shared/validateDateService";const service = new ValidateDateService();service.validateDateParts(2024, 2, 29); // Valid leap year dateservice.validateDateParts(2024, 1, 15); // Valid regular date
validateInputFormat(format)format (required)brazilianDate | usDate | isoDate | timestamptypescript
import { ValidateDateService } from "@arkyn/shared/validateDateService";const service = new ValidateDateService();service.validateInputFormat("brazilianDate"); // Validservice.validateInputFormat("usDate"); // Validservice.validateInputFormat("isoDate"); // Valid (deprecated alias for "usDate")service.validateInputFormat("timestamp"); // Valid
parseDateParts(dateParts, inputFormat)inputFormat into a validated { year, month, day } object, running each value through validateDateParts before returning. This is the single implementation shared internally by parseToDate, formatDate (both @arkyn/shared), and validateDate (@arkyn/server), previously each had its own copy-pasted reordering logic.dateParts (required)number[]inputFormat (required)DateInputFormat (brazilianDate | usDate | isoDate | timestamp)typescript
import { ValidateDateService } from "@arkyn/shared/validateDateService";const service = new ValidateDateService();service.parseDateParts([25, 12, 2023], "brazilianDate");// { year: 2023, month: 12, day: 25 }service.parseDateParts([12, 25, 2023], "usDate");// { year: 2023, month: 12, day: 25 }
DateInputFormat type@arkyn/shared. It's the union accepted as inputFormat by formatDate, parseToDate, ValidateDateService.validateInputFormat, ValidateDateService.parseDateParts, and @arkyn/server's validateDate.typescript
type DateInputFormat = "brazilianDate" | "isoDate" | "usDate" | "timestamp";
"brazilianDate": DD/MM/YYYY."usDate": MM-DD-YYYY. New name in v3.0.12."isoDate": MM-DD-YYYY, a deprecated alias of "usDate". It was never ISO 8601. The deprecation is JSDoc-only, no runtime warning is emitted."timestamp": YYYY-MM-DD, the actual ISO 8601 date format.typescript
const service = new ValidateDateService();service.validateDateParts(2023, 2, 29);// Throws: "Day 29 is not valid for February 2023 (non-leap year)"service.validateDateParts(2024, 4, 31);// Throws: "Day 31 is not valid for April"service.validateDateParts(99, 1, 15);// Throws: "Year should be four digits"
typescript
const service = new ValidateDateService();service.validateInputFormat("invalidFormat");// Throws: "Invalid input format: invalidFormat"
validateDateParts above, since it validates the reordered parts before returning them.typescript
const service = new ValidateDateService();service.parseDateParts([30, 2, 2023], "brazilianDate");// Throws: "Day 30 is not valid for February"
parseToDate to ensure input consistency before processing.