It’s important to read the documentation, and then read it again once or twice.
PHP’s date_parse function parses a datetime string and returns an “array with information about the parsed date on success or FALSE on failure.”
This makes it tempting to use the function something like:
$datetime = date_parse($datetime_string);
if ( $datetime === FALSE ) {
# Failure - deal with the bad $datetime_string
}
else {
# Success - use the $datetime
}
However in this case failure means the the date_parse function has failed to work at a fairly fundamental level and reading the docs further you find “In case the date format has an error, the element ‘errors’ will contains the error messages.”
And indeed:
<?php
print_r(date_parse('real soon now'));
Array(
[year] =>
[month] =>
[day] =>
[hour] =>
[minute] =>
[second] =>
[fraction] =>
[warning_count] => 1
[warnings] => Array(
[5] => Double timezone specification
)
[error_count] => 1
[errors] => Array(
[0] => The timezone could not be found in the database
)
[is_localtime] => 1
[zone_type] => 0
)
So in fact what is needed is something more like:
$datetime = date_parse($datetime_string);
if ( $datetime === FALSE ) {
# Failure - report fatal error processing $datetime_string
}
else if ( $datetime['error_count'] > 0 ) {
# Failure - report errors in $datetime['errors']
}
else {
# Success - use the $datetime
# (but maybe have a look at $datetime['warning_count'] too)
}