Основы
Самый простой способ преобразовать один формат даты в другой - использовать 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. Поскольку метка времени слишком велика для 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');
person
John Conde
schedule
15.04.2014