©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.2.0, PHP 7)
date_parse — Returns associative array with detailed info about given date
$date
)
date
Date in format accepted by strtotime() .
Returns array with information about the parsed date
on success 或者在失败时返回 FALSE
.
In case the date format has an error, the element 'errors' will contains the error messages.
Example #1 A date_parse() example
<?php
print_r ( date_parse ( "2006-12-12 10:00:00.5" ));
?>
以上例程会输出:
Array ( [year] => 2006 [month] => 12 [day] => 12 [hour] => 10 [minute] => 0 [second] => 0 [fraction] => 0.5 [warning_count] => 0 [warnings] => Array() [error_count] => 0 [errors] => Array() [is_localtime] => )
Relative formats do not influence the values parsed from absolute formats, but are parsed into the "relative" element.
Example #2 date_parse() with relative formats
<?php
print_r ( date_parse ( "2006-12-12 10:00:00.5 +1 week +1 hour" ));
?>
以上例程会输出:
Array ( [year] => 2006 [month] => 12 [day] => 12 [hour] => 10 [minute] => 0 [second] => 0 [fraction] => 0.5 [warning_count] => 0 [warnings] => Array ( ) [error_count] => 0 [errors] => Array ( ) [is_localtime] => [relative] => Array ( [year] => 0 [month] => 0 [day] => 7 [hour] => 1 [minute] => 0 [second] => 0 ))
[#1] thisismelennart dot borgman at gmail dot com [2014-11-21 19:04:52]
Here is a workaround for the "Feb 2010" problem. It also handles "2014".
http://stackoverflow.com/questions/27052374/php-date-parsefeb-2010-gives-day-1/27068409
[#2] adamm at extratech dot com [2012-07-03 17:24:19]
A warning to some
<?php
$time = "00:14:38"
$parse_date = date_parse($time);
echo var_dump($parse_date) ."<br>";
//here you will get what you expect
$time = "-00:14:38"
$parse_date = date_parse($time);
echo var_dump($parse_date) ."<br>";
//here you will recieve hours minutes and seconds as booleans and as false and you will get error set to "Unexpected character"
$time = "00:-14:38"
$parse_date = date_parse($time);
echo var_dump($parse_date) ."<br>";
//here you will recieve the same as the above
$time = "00:14:-38"
$parse_date = date_parse($time);
echo var_dump($parse_date) ."<br>";
//here you will receive hours as 00 minutes as 14 and seconds as 0. The error will get set as the same as above. Meaning "Unexpected character"
?>
[#3] ryan_a_martin at yahoo dot com [2011-03-02 06:56:25]
See checkdate() at http://php.net/manual/en/function.checkdate.php for Gregorian date validation.
[#4] alvaro at demogracia dot com [2011-02-15 03:59:24]
Be aware that date_parse() is happy with just a time zone and it can be pretty counter-intuitive. E.g.:
<?php
var_dump( date_parse('Europe/Madrid') );
?>
... prints an array where year, month, day... are FALSE. But so do these:
<?php
var_dump( date_parse('A') );
var_dump( date_parse('B') );
var_dump( date_parse('X') );
?>
Don't forget to further validate date_parse()'s output even when it isn't FALSE and the 'errors' key is empty.
[#5] admin at torntech dot com [2010-09-22 08:18:21]
A warning to others. Some keys will return with a default value where others will return as false if the date string has it omitted. Unsure if this is a bug or feature, but hopefully this will save someone some time.
<?php
///Example
$input = "Feb 2010";
$info = date_parse($input);
var_dump($info);
?>
[#6] eugene at ultimatecms dot co dot za [2009-11-23 02:43:27]
<?php
$ida = '091122671325';
$idb = '091123671325';
// This function will match the identity number up to the day, but only for a maximum of 99years+364days.
// Will not work when checking persons older than 100years-1day.
function idtodate($id)
{
$year = date("Y");
$month = date("m");
$day = date("d");
$nc = substr($year, 0, 2);
$ny = substr($year, 2, 2);
$y = substr($id, 0, 2);
$m = substr($id, 2, 2);
$d = substr($id, 4, 2);
if($y.$m.$d <= $ny.$month.$day-1) {
$newc = $nc;
} else {
$newc = $nc-1;
}
$new = $newc.$y;
return array('year' => $new, 'month' => $m, 'day' => $d);
}
echo 'ID: '.$ida.'<br>';
print_r(idtodate($ida));
echo '<br><br>';
echo 'ID: '.$idb.'<br>';
print_r(idtodate($idb));
?>
Output:
1. If the year-month-day is smaller than today (2009-11-23), but bigger than 1999: year => 2009
ID: 091122671325
Array ( [year] => 2009 [month] => 11 [day] => 22 )
2. If the year-month-day is the same as, or bigger than today, but smaller than 2000: year => 1909
ID: 091123671325
Array ( [year] => 1909 [month] => 11 [day] => 23 )
[#7] alan at wilcoxengineering dot com [2009-08-14 11:02:30]
Caution: date_parse expects months 1..12 only.
date_parse("13/1/5769") for month=13, Ehul in Jewish calendar, results in month==3 instead of month==13.
It does, however, report the error array showing "Unexpected Character."
It would be nice if date_parse could handle the months properly (just report back a "13" for the month). The older approach of substr() is my workaround.
[#8] gpayne at galenaparkisd com [2007-09-29 16:52:42]
Careful - date_parse is perfectly happy with something like this:
date_parse("2006-2-31");