Преобразование одного формата даты в другой в PHP
PHP 5.3 и выше
Используйте DateTime::createFromFormat. Это позволит вам указать точную маску - используя date() синтаксис - для анализа дат входящей строки.
PHP 5.2 и ниже
Вам придется проанализировать элементы (год, месяц, день, час, минута, секунда) вручную, используя substr() и передать результаты в mktime() , который создаст вам метку времени.
Вариант 1.
$old_date = date('l, F d y h:i:s'); // returns Saturday, January 30 10 02:06:34 $old_date_timestamp = strtotime($old_date); $new_date = date('Y-m-d H:i:s', $old_date_timestamp);
Вариант 2.
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString); $newDateString = $myDateTime->format('m/d/Y'); $now = new DateTime(); $timestring = $now->format('Y-m-d h:i:s');
Вариант 3.
$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')); $date = new DateTime('2008-07-01T22:35:17.02'); $new_date_format = $date->format('Y-m-d H:i:s');
Работа с временными метками Unix
<?php // 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() $timestamp = substr('1234567899000', -3); // Разделите substr на 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, вместо этого вы можете // использовать параметр форматирования: $date = new DateTime('2008-07-01T22:35:17.02'); $timestamp = $date->format('U'); ?>
Работа с нестандартными и неоднозначными форматами даты
<?php $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'); ?>
Вариант 4.
$old_date = date('y-m-d-h-i-s'); $new_date = date('Y-m-d H:i:s', strtotime($old_date)); $date = DateTime::createFromFormat('d-m-Y H:i:s',$date)->format('Y-m-d H:i:s');