function date_is_valid in Date 6
Same name and namespace in other branches
- 5.2 date_api.module \date_is_valid()
- 5 date.inc \date_is_valid()
- 6.2 date_api.module \date_is_valid()
Functions to test the validity of a date in various formats. Has special case for ISO dates and arrays which can be missing month and day and still be valid.
Parameters
$type: could be DATE_ARRAY, DATE_UNIX, DATE_DATETIME, DATE_ISO, or DATE_OBJECT
9 calls to date_is_valid()
- DateAPI::testDateAPI in tests/date_api.test 
- date_convert_from_custom in ./date_api_elements.inc 
- Convert a date input in a custom format to a standard date type
- date_limit_value in ./date_api.module 
- Recalculate a date so it only includes elements from a granularity array. Helps prevent errors when unwanted values round up and ensures that unwanted date part values don't get stored in the database.
- date_make_date in ./date_api.module 
- Convert a date of any type or an array of date parts into a valid date object.
- date_php4.inc in date_php4/date_php4.inc 
File
- ./date_api.module, line 1076 
- This module will make the date API available to other modules. Designed to provide a light but flexible assortment of functions and constants, with more functionality in additional files that are not loaded unless other modules specifically include them.
Code
function date_is_valid($date, $type = DATE_DATETIME) {
  if (empty($date)) {
    return FALSE;
  }
  if ($type == DATE_OBJECT && !is_object($date)) {
    return FALSE;
  }
  if (($type == DATE_ISO || $type == DATE_DATETIME) && !preg_match(DATE_REGEX_LOOSE, $date)) {
    return FALSE;
  }
  if ($type == DATE_UNIX and !is_numeric($date)) {
    return FALSE;
  }
  if ($type == DATE_ARRAY and !is_array($date)) {
    return FALSE;
  }
  // If checkdate works, no need for further tests.
  $year = date_part_extract($date, 'year', $type);
  $month = date_part_extract($date, 'month', $type);
  $day = date_part_extract($date, 'day', $type);
  if (!checkdate($month, $day, $year)) {
    // ISO dates and arrays can have empty date parts
    if ($type == DATE_ISO || $type == DATE_ARRAY) {
      if (variable_get('date_max_year', 4000) < $year || variable_get('date_min_year', 1) > $year || 12 < $month || 0 > $month || 31 < $day || 0 > $day) {
        return FALSE;
      }
    }
    elseif (variable_get('date_max_year', 4000) < $year || variable_get('date_min_year', 1) > $year || 12 < $month || 1 > $month || 31 < $day || 1 > $day) {
      return FALSE;
    }
  }
  return TRUE;
}