WordPress — Какой правильный формат для создания экземпляра PHP DateTime «2016.04.30 PM 7:30» через DateTime :: createFromFormat?

В настоящее время я работаю над проектом WordPress, где я должен получить несколько пользовательских метаданных, преобразовать их в DateTime например, и сделать математику с этим.

Когда я echo get_post_meta, это выглядит следующим образом.

2016.04.30 вечера 7:30

Формат, который я использую, чтобы получить DateTime пример заключается в следующем.

Y.m.d A g: i

Но возвращаемое значение DateTime::createFromFormat является false,

// 2016.04.30 PM 7:30
$start_at = DateTime::createFromFormat( 'Y.m.d A g:i', get_post_meta(get_the_ID(), 'as_date', true));
if ($start_at === false) {
echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true);
} else {
echo $start_at->getTimestamp();
}

Результат False format: 2016.04.30 PM 7:30,

Что мне здесь не хватает? Я думаю, что это должно быть что-то тривиальное, но я не могу пройти.

6

Решение

Тестируя, я обнаружил, что символ проблемы в формате был «А». Так что я осмотрелся и нашел это ошибка в PHP (это, очевидно, не ошибка вообще!)

Проходя через исходный код, похоже, что он не будет анализировать AM и PM, пока не будет проанализирован час.

Вероятно, вашей лучшей ставкой будет быстрый переход к регулярному выражению, чтобы переместить AM / PM в конец:

$thedate = get_post_meta(get_the_ID(), 'as_date', true);
$thedate = preg_replace("/([0-9.]+) ([ap]m) ([0-9:]+)/i", "$1 $3 $2", $thedate);
$start_at = DateTime::createFromFormat('Y.m.d g:i A', $thedate);
3

Другие решения

Измените формат даты и попробуйте createFromFormat

$non_standard_format  = '2016.04.30 PM 7:30';
$non_standard_format = str_replace('.','-',$non_standard_format);
$date_components = explode(" ",$non_standard_format);
$standard_format = $date_components[0]." ".$date_components[2]." ".$date_components[1];

Затем попробуйте передать это DateTime::createFromFormat

$start_at = DateTime::createFromFormat( 'Y-m-d g:i A', $standard_format);
if ($start_at === false) {
echo 'False format: ' . get_post_meta(get_the_ID(), 'as_date', true);
} else {
echo $start_at->getTimestamp();
}

Поддерживаемые форматы даты в PHP

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector