Основы
Самый простой способ конвертировать один формат даты в другой - использовать 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()
принимает timeatamp 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');