Основы
Самый простой способ конвертировать один формат даты в другой - использовать strtotime()
с date()
. strtotime()
преобразует дату в метку времени Unix . Эта временная метка Unix может быть передана в date()
для преобразования ее в новый формат.
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
Или как однострочный:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
Имейте в виду, что strtotime()
требует, чтобы дата была в допустимом формате . Если вы не укажете правильный формат, strtotime()
вернет false, и ваша дата будет 1969-12-31.
Использование DateTime()
Начиная с PHP 5.2, PHP предлагал класс DateTime()
, который предлагает нам более мощные инструменты для работы с датами (и временем). Мы можем переписать приведенный выше код, используя DateTime()
следующим образом:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
Работа с метками времени Unix
date()
принимает значение времени Unix в качестве второго параметра и возвращает отформатированную дату для вас:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime () работает с метками времени Unix, добавляя @
перед меткой времени:
$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
Если у вас есть метка времени в миллисекундах (она может заканчиваться 000
и / или метка времени длиной тринадцать символов), вам потребуется преобразовать ее в секунды, прежде чем вы сможете преобразовать ее в другой формат. Есть два способа сделать это:
- Обрезать последние три цифры с помощью
substr()
Обрезка последних трех цифр может быть достигнута несколькими способами, но использование substr()
является самым простым:
$timestamp = substr('1234567899000', -3);
- Разделите значение на 1000
Вы также можете преобразовать отметку времени в секунды, разделив ее на 1000. Поскольку отметка времени слишком велика для математических вычислений 32-битных систем, вам потребуется библиотека BCMath для выполнения математических операций в виде строк :
$timestamp = bcdiv('1234567899000', '1000');
Чтобы получить метку времени Unix, вы можете использовать strtotime()
, которая возвращает метку времени Unix:
$timestamp = strtotime('1973-04-18');
С DateTime () вы можете использовать DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
Если вы используете PHP 5.2, вы можете использовать вместо этого параметр форматирования U
:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
Работа с нестандартными и неоднозначными форматами даты
К сожалению, не все даты, с которыми разработчик должен работать, имеют стандартный формат. К счастью, PHP 5.3 предоставил нам решение для этого. DateTime::createFromFormat()
позволяет нам сообщить PHP, в каком формате находится строка даты, чтобы ее можно было успешно проанализировать в объект DateTime для дальнейшей манипуляции.
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
В PHP 5.4 мы получили возможность делать доступ к элементам класса при добавлении экземпляров, что позволяет нам превращать наш DateTime()
код в однострочник:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');