(PHP 5 >= 5.2.0)
date_parse — Returns associative array with detailed info about given date
Returns array with information about the parsed date on successIm Fehlerfall wird FALSE zurückgegeben..
In case the date format has an error, the element 'errors' will contains the error messages.
Beispiel #1 A date_parse() example
<?php
print_r(date_parse("2006-12-12 10:00:00.5"));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
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] => )
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);
/*Returns:
array(12) {
["year"]=> int(2010)
["month"]=> int(2)
["day"]=> int(1) //<---expected false like below
["hour"]=> bool(false)
["minute"]=> bool(false)
["second"]=> bool(false)
["fraction"]=> bool(false)
["warning_count"]=> int(0)
["warnings"]=> array(0) { }
["error_count"]=> int(0)
["errors"]=> array(0) { }
["is_localtime"]=> bool(false)
}*/
?>
<?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 )
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.
Careful - date_parse is perfectly happy with something like this:
date_parse("2006-2-31");