date_parse_from_format

(PHP 5 >= 5.3.0, PHP 7)

date_parse_from_formatGet info about given date formatted according to the specified format

Description

array date_parse_from_format ( string $format , string $date )

Returns associative array with detailed info about given date.

Parameters

format

Format accepted by DateTime::createFromFormat().

date

String representing the date.

Return Values

Returns associative array with detailed info about given date.

Changelog

Version Description
7.2.0 The zone element of the returned array represents seconds instead of minutes now, and its sign is inverted. For instance -120 is now 7200.

Examples

Example #1 date_parse_from_format() example

<?php
$date 
"6.1.2009 13:00+01:00";
print_r(date_parse_from_format("j.n.Y H:iP"$date));
?>

The above example will output:

Array
(
    [year] => 2009
    [month] => 1
    [day] => 6
    [hour] => 13
    [minute] => 0
    [second] => 0
    [fraction] => 
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 0
    [errors] => Array
        (
        )

    [is_localtime] => 1
    [zone_type] => 1
    [zone] => 3600
    [is_dst] => 
)

See Also

add a note add a note

User Contributed Notes 1 note

up
19
Archetrix
4 years ago
For use in Versions prior V5.3:

<?php
if (!function_exists('date_parse_from_format')) {

    function
date_parse_from_format($format, $date) {
       
// reverse engineer date formats
       
$keys = array(
           
'Y' => array('year', '\d{4}'),
           
'y' => array('year', '\d{2}'),
           
'm' => array('month', '\d{2}'),
           
'n' => array('month', '\d{1,2}'),
           
'M' => array('month', '[A-Z][a-z]{3}'),
           
'F' => array('month', '[A-Z][a-z]{2,8}'),
           
'd' => array('day', '\d{2}'),
           
'j' => array('day', '\d{1,2}'),
           
'D' => array('day', '[A-Z][a-z]{2}'),
           
'l' => array('day', '[A-Z][a-z]{6,9}'),
           
'u' => array('hour', '\d{1,6}'),
           
'h' => array('hour', '\d{2}'),
           
'H' => array('hour', '\d{2}'),
           
'g' => array('hour', '\d{1,2}'),
           
'G' => array('hour', '\d{1,2}'),
           
'i' => array('minute', '\d{2}'),
           
's' => array('second', '\d{2}')
        );

       
// convert format string to regex
       
$regex = '';
       
$chars = str_split($format);
        foreach (
$chars AS $n => $char) {
           
$lastChar = isset($chars[$n - 1]) ? $chars[$n - 1] : '';
           
$skipCurrent = '\\' == $lastChar;
            if (!
$skipCurrent && isset($keys[$char])) {
               
$regex .= '(?P<' . $keys[$char][0] . '>' . $keys[$char][1] . ')';
            } else if (
'\\' == $char) {
               
$regex .= $char;
            } else {
               
$regex .= preg_quote($char);
            }
        }

       
$dt = array();
       
$dt['error_count'] = 0;
       
// now try to match it
       
if (preg_match('#^' . $regex . '$#', $date, $dt)) {
            foreach (
$dt AS $k => $v) {
                if (
is_int($k)) {
                    unset(
$dt[$k]);
                }
            }
            if (!
checkdate($dt['month'], $dt['day'], $dt['year'])) {
               
$dt['error_count'] = 1;
            }
        } else {
           
$dt['error_count'] = 1;
        }
       
$dt['errors'] = array();
       
$dt['fraction'] = '';
       
$dt['warning_count'] = 0;
       
$dt['warnings'] = array();
       
$dt['is_localtime'] = 0;
       
$dt['zone_type'] = 0;
       
$dt['zone'] = 0;
       
$dt['is_dst'] = '';
        return
$dt;
    }

}
?>

Not my invention though. I found it here: http://stackoverflow.com/questions/6668223/php-date-parse-from-format-alternative-in-php-5-2

Thought this might be a good place to keep a copy in case someone stumbles upon the same problem facing outdated PHP versions on customer servers ....
To Top