PHP 7.0.6 Released

date_parse

(PHP 5 >= 5.2.0, PHP 7)

date_parseReturns associative array with detailed info about given date

Description

array date_parse ( string $date )

Parameters

date

Date in format accepted by strtotime().

Return Values

Returns array with information about the parsed date on success or FALSE on failure.

Errors/Exceptions

In case the date format has an error, the element 'errors' will contains the error messages.

Examples

Example #1 A date_parse() example

<?php
print_r
(date_parse("2006-12-12 10:00:00.5"));
?>

The above example will output:

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"));
?>

The above example will output:

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
        )

)

See Also

User Contributed Notes

admin at torntech dot com
5 years ago
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)
}*/
?>
alvaro at demogracia dot com
5 years ago
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.
ryan_a_martin at yahoo dot com
5 years ago
See checkdate() at http://php.net/manual/en/function.checkdate.php for Gregorian date validation.
adamm at extratech dot com
3 years ago
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"
?>
gpayne at galenaparkisd com
8 years ago
Careful - date_parse is perfectly happy with something like this:

date_parse("2006-2-31");
alan at wilcoxengineering dot com
6 years ago
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.
eugene at ultimatecms dot co dot za
6 years ago
<?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 )
To Top