date_parse_from_format
(PHP 5 >= 5.3.0)
date_parse_from_format — Получение информации о заданной в определенном формате дате
Описание
array date_parse_from_format
( string
$format
, string $date
)Возвращает ассоциативный массив с подробной информацией о заданной дате.
Список параметров
-
format
-
Формат, распознаваемый функцией DateTime::createFromFormat().
-
date
-
Строка, представляющая дату.
Возвращаемые значения
Возвращает ассоциативный массив с подробной информацией о заданной дате.
Примеры
Пример #1 Пример использования date_parse_from_format()
<?php
$date = "6.1.2009 13:00+01:00";
print_r(date_parse_from_format("j.n.Y H:iP", $date));
?>
Результат выполнения данного примера:
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] => -60 [is_dst] => )
Смотрите также
- DateTime::createFromFormat() - Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату
- checkdate() - Проверяет корректность даты по григорианскому календарю
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с датой и временем
- Дата и Время
- checkdate
- date_add
- date_create_from_format
- date_create_immutable_from_format
- date_create_immutable
- date_create
- date_date_set
- date_default_timezone_get
- date_default_timezone_set
- date_diff
- date_format
- date_get_last_errors
- date_interval_create_from_date_string
- date_interval_format
- date_isodate_set
- date_modify
- date_offset_get
- date_parse_from_format
- date_parse
- date_sub
- date_sun_info
- date_sunrise
- date_sunset
- date_time_set
- date_timestamp_get
- date_timestamp_set
- date_timezone_get
- date_timezone_set
- date
- getdate
- gettimeofday
- gmdate
- gmmktime
- gmstrftime
- idate
- localtime
- microtime
- mktime
- strftime
- strptime
- strtotime
- time
- timezone_abbreviations_list
- timezone_identifiers_list
- timezone_location_get
- timezone_name_from_abbr
- timezone_name_get
- timezone_offset_get
- timezone_open
- timezone_transitions_get
- timezone_version_get
Коментарии
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 ....
$date = "10 October 2018 19:30 pm";
print_r (date_parse_from_format("j F Y G:i a", $date));
Output:
Array (
[year] => 2018
[month] => 10
[day] => 10
[hour] => 31
[minute] => 30
[second] => 0
[fraction] =>
[warning_count] => 1
[warnings] => Array (
[24] => The parsed time was invalid
)
[error_count] => 0
[errors] => Array ( )
[is_localtime] =>
)
19:30 pm is invalid, 24-hour format of an hour can't be used with am/pm
must be replaced with:
$date = "10 October 2018 19:30";
print_r (date_parse_from_format("j F Y G:i", $date));
or:
$date = "10 October 2018 7:30 pm";
print_r (date_parse_from_format("j F Y g:i a", $date));