Основи
Simplist спосіб перетворити один формат дати в інший для використання 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()
повернення помилки, що призведе до того, що ваша дата буде 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');