mysql2date()
Переводит указанную дату (в виде стоки) в другой формат.
Формат указывается идентично PHP функции date().
Ожидается, что $date передаётся в локальном времени (не UTC).
Форматы 'U' и 'G' вернут число — сумму метки времени + смещения часового пояса сайта. Это нестандартное поведение! Так исторически сложилось, когда можно было передать $data в UTC, чтобы получить метку времени Unix. См. пример ниже.
Функция в отличии от PHP функции date(), будет локализовать (переводить) месяц.
Работает на раннем этапе загрузки WordPress, еще до константы SHORTINIT.
Хуков нет.
Возвращает
Строку|int|false
.
число
- когда $format =U
илиG
.строка
- в остальных случаях.false
- в случае ошибки.
Использование
mysql2date( $format, $date, $translate );
- $format(строка) (обязательный)
Формат даты который нам нужно получить. Например, написав
j n Y
получим:25 12 2011
. Примеры форматов.Если используются форматы
U
илиG
, то в параметре$date
нужно указать дату в GMT (UTC) таймзоне! См. пример ниже.- $date(строка) (обязательный)
- Дата, которую нужно изменить. Может быть в любом общепринятом формате. Обычно передается в формате MySQL (
Y-m-d H:i:s
). - $translate(логический)
- true - функция будет пытаться переводить название месяцев, дней и т.п. на текущий язык установленный в WordPress (локализовать).
По умолчанию: true
Примеры
#1 Как работает функция
echo mysql2date( 'd.M.Y H:i', '2015-07-24 15:23:14' ); // 24.Jul.2015 15:23 echo mysql2date( 'd-m-Y', '2020-10-25' ); // 25-10-2020 echo mysql2date( 'F j, Y', '2023-06-22 10:30:00' ); // June 22, 2023 echo mysql2date( 'l, F jS, Y \a\t g:i A', '2023-06-22 10:30:00', false ); // Thursday, June 22nd, 2023 at 10:30 AM
#2 Выведем дату публикации поста в формате d-m-Y
:
echo mysql2date( 'd-m-Y', $post->post_date ); // 02-12-2011
Примеры форматов смотрите здесь.
#3 Форматы U
и G
имеют свою особенность!
Форматы U
и G
- работают одинаково:
echo mysql2date( 'U', '2012-02-23 06:12:45' ); // 1329977565 echo mysql2date( 'G', '2012-02-23 06:12:45' ); // 1329977565
Важно! При использовании формата U
и G
, передаваемая дата должна быть так же в UTC (GMT) зоне!
Например, если передать дату поста $post->post_data
, то мы получим метку времени Unix timestamp + сдвиг таймзоны сайта
, а не просто ожидаемую Unix timestamp даты. Такое нестандартное поведение обусловлено легаси кодом!
Пример для проверки:
// здесь мы используем текущее время в UTC (GMT) зоне $time = mysql2date( 'U', gmdate( 'Y-m-d H:i:s' ) ); var_dump( time() === $time ); // bool(true)
Из-за таких особенностей вообще не рекомендуется использовать mysql2date() для получения UNIX-метки времени. Потому что поведение не очевидное.
Как правильно получить метку времени из даты (не в UTC зоне)
Для этого можно использовать такой код, по которому будет понятно что происходит с датой:
$post_time = date_create( $post->post_date, wp_timezone() )->getTimestamp();
Тут мы передаем дату поста в таймзоне сайта (не в UTC), а получаем UNIX метку времени (как ожидаемо в UTC таймзоне). Так происходит, потому что во втором параметре date_create() мы указываем в какой временной зоне передана дата.
Или можно так:
date_create( $post->post_date_gmt, new \DateTimeZone('UTC') )->getTimestamp();
Список изменений
С версии 0.71 | Введена. |