1. <?php
  2. /**
  3. * Validates date values with fallback logic.
  4. *
  5. * @param string $date_string The date string to validate.
  6. * @param string $format The expected date format (e.g., 'Y-m-d', 'm/d/Y').
  7. * @param string $fallback_format The fallback date format to attempt if the primary format fails.
  8. * @param int $fallback_attempts The number of attempts to use the fallback format.
  9. * @param string $default_date The date to use if all attempts fail.
  10. *
  11. * @return DateTime|null A DateTime object if the date is valid, null otherwise.
  12. */
  13. function validateDate(string $date_string, string $format, string $fallback_format, int $fallback_attempts = 1, string $default_date = '1970-01-01'): ?DateTime
  14. {
  15. $dateTime = DateTime::createFromFormat($format, $date_string);
  16. if ($dateTime === false) {
  17. // Try fallback format
  18. for ($i = 1; $i <= $fallback_attempts; $i++) {
  19. $dateTime = DateTime::createFromFormat($fallback_format, $date_string);
  20. if ($dateTime !== false) {
  21. break; // Fallback successful
  22. }
  23. }
  24. if ($dateTime === false) {
  25. // Fallback failed, use default date
  26. $dateTime = DateTime::createFromFormat($fallback_format, $default_date);
  27. if ($dateTime === false) {
  28. return null; // Default failed too
  29. }
  30. }
  31. }
  32. return $dateTime;
  33. }
  34. //Example Usage:
  35. /*
  36. $date_string = '2024-10-27';
  37. $format = 'Y-m-d';
  38. $fallback_format = 'm/d/Y';
  39. $default_date = '1900-01-01';
  40. $dateTime = validateDate($date_string, $format, $fallback_format, 2, $default_date);
  41. if ($dateTime) {
  42. echo "Valid Date: " . $dateTime->format('Y-m-d') . "\n";
  43. } else {
  44. echo "Invalid Date\n";
  45. }
  46. */
  47. ?>

Add your comment