<?php
/**
* Validates date values with fallback logic.
*
* @param string $date_string The date string to validate.
* @param string $format The expected date format (e.g., 'Y-m-d', 'm/d/Y').
* @param string $fallback_format The fallback date format to attempt if the primary format fails.
* @param int $fallback_attempts The number of attempts to use the fallback format.
* @param string $default_date The date to use if all attempts fail.
*
* @return DateTime|null A DateTime object if the date is valid, null otherwise.
*/
function validateDate(string $date_string, string $format, string $fallback_format, int $fallback_attempts = 1, string $default_date = '1970-01-01'): ?DateTime
{
$dateTime = DateTime::createFromFormat($format, $date_string);
if ($dateTime === false) {
// Try fallback format
for ($i = 1; $i <= $fallback_attempts; $i++) {
$dateTime = DateTime::createFromFormat($fallback_format, $date_string);
if ($dateTime !== false) {
break; // Fallback successful
}
}
if ($dateTime === false) {
// Fallback failed, use default date
$dateTime = DateTime::createFromFormat($fallback_format, $default_date);
if ($dateTime === false) {
return null; // Default failed too
}
}
}
return $dateTime;
}
//Example Usage:
/*
$date_string = '2024-10-27';
$format = 'Y-m-d';
$fallback_format = 'm/d/Y';
$default_date = '1900-01-01';
$dateTime = validateDate($date_string, $format, $fallback_format, 2, $default_date);
if ($dateTime) {
echo "Valid Date: " . $dateTime->format('Y-m-d') . "\n";
} else {
echo "Invalid Date\n";
}
*/
?>
Add your comment