apphouse
Version:
Component library for React that uses observable state management and theme-able components.
52 lines (48 loc) • 1.42 kB
text/typescript
/**
* Check if a string is a valid date.
*
* @param {string} dateString - The string to check.
* @returns {boolean} - True if the string is a valid date, false otherwise.
*/
export function isValidDate(dateString?: string) {
if (!dateString) {
return false;
}
// Try to create a Date object from the given string
const date = new Date(dateString);
// manually check for leap year
if (date.getMonth() === 1 && date.getDate() === 29) {
const year = date.getFullYear();
if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
return true;
}
return false;
}
const dateStringParts = dateString.split('-');
// manually check for month > 12
if (parseInt(dateStringParts[1], 10) > 12) {
return false;
}
// manually check for day > 31
if (parseInt(dateStringParts[2], 10) > 31) {
return false;
}
// manually handle february
if (parseInt(dateStringParts[1], 10) === 2) {
// manually check for feb 30
if (parseInt(dateStringParts[2], 10) > 29) {
return false;
}
// manually check for feb 29
if (parseInt(dateStringParts[2], 10) === 29) {
const year = parseInt(dateStringParts[0], 10);
if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
return true;
}
return false;
}
}
// Check if the date is a valid date
const isValid = !isNaN(date.getTime());
return isValid;
}