Преобразование из MySQL datetime в другой формат с помощью PHP


У меня есть столбец datetime в MySQL.

Как я могу преобразовать его в отображение в виде мм/дд/гг Ч:М (AM/PM) с помощью PHP?

Author: davejal, 2008-09-26

17 answers

Если вы ищете способ нормализовать дату в формате MySQL, используйте следующий

$phpdate = strtotime( $mysqldate );
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );

Строка $phpdate = strtotime( $mysqldate ) принимает строку и выполняет ряд эвристических операций, чтобы превратить эту строку в метку времени unix.

Строка $mysqldate = date( 'Y-m-d H:i:s', $phpdate ) использует эту метку времени и PHP date функция для преобразования этой метки времени обратно в стандартный формат даты MySQL.

( Примечание редактора: Этот ответ здесь из-за оригинального вопроса с запутанной формулировкой, и общая полезность Google этот ответ предоставил, даже если он не "прямо отвечал на вопрос, который сейчас существует)

 473
Author: kta, 2015-01-16 19:09:00

Для преобразования даты, полученной из MySQL, в запрошенный формат (mm/dd/yy H:M (AM/PM)):

// $datetime is something like: 2014-01-31 13:05:59
$time = strtotime($datetimeFromMysql);
$myFormatForView = date("m/d/y g:i A", $time);
// $myFormatForView is something like: 01/31/14 1:05 PM

Обратитесь к Параметрам форматирования даты PHP, чтобы настроить формат.

 289
Author: Tim Boland, 2014-11-21 10:23:52

Если вы используете PHP 5, вы также можете попробовать

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
 103
Author: enobrev, 2014-11-13 20:02:59
$valid_date = date( 'm/d/y g:i A', strtotime($date));

Ссылка: http://php.net/manual/en/function.date.php

 35
Author: Tony Stark, 2017-07-24 13:24:19

Наконец-то правильное решение для PHP 5.3 и выше:

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
echo $date->format('m/d/y h:i a');
 15
Author: Hasenpriester, 2018-03-21 00:44:39

Более простым способом было бы отформатировать дату непосредственно в запросе MySQL вместо PHP. Смотрите Ручную запись MySQL для DATE_FORMAT.

Если вы предпочитаете делать это на PHP, то вам нужна функция дата, но сначала вам придется преобразовать значение базы данных в метку времени.

 12
Author: flash, 2008-09-25 23:15:23

Забудь все. Просто используйте:

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))
 10
Author: nixis, 2014-04-09 16:51:03

Чтобы правильно отформатировать объект DateTime в PHP для хранения в MySQL, используйте стандартизированный формат, используемый MySQL, который является ISO 8601.

PHP хранит этот формат как константу с версии 5.1.1, и я настоятельно рекомендую использовать его, а не вводить строку вручную каждый раз.

$dtNow = new DateTime();
$mysqlDateTime = $dtNow->format(DateTime::ISO8601);

Это, а также список других констант даты и времени PHP доступны по адресу http://php.net/manual/en/class.datetime.php#datetime.constants.types

 9
Author: Greg, 2013-05-31 17:42:08

Это должно форматировать поле в SQL-запросе:

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename
 8
Author: riz, 2014-04-09 16:49:21

Используйте функцию дата:

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>
 7
Author: Gustavo Carreno, 2008-09-25 23:16:05

В зависимости от вашей конфигурации даты и времени MySQL. Как правило,: 2011-12-31 07:55:13 формат. Эта очень простая функция должна творить чудеса:

function datetime()
{
    return date( 'Y-m-d H:i:s', time());
}

echo datetime(); // display example: 2011-12-31 07:55:13

Или немного больше, чтобы соответствовать вопросу.

function datetime($date_string = false)
{
    if (!$date_string)
    {
        $date_string = time();
    }
    return date("Y-m-d H:i:s", strtotime($date_string));
}
 5
Author: tfont, 2014-10-29 11:45:52
SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

Если вы не хотите изменять каждую функцию в своем PHP-коде, чтобы отобразить ожидаемый формат даты, измените его в источнике - вашей базе данных.

Важно называть строки с помощью оператора как , как в приведенном выше примере (как дата от, как дата до). Имена, которые вы там пишете, - это имена, строки будут вызваны в вашем результате.

Результатом этого примера будет

[День месяца, числовой (0..31)].[Название месяца (январь..Декабрь)].[Год, числовой, четыре цифры]

Пример: 5. Август.2015

Измените точки с помощью выбранного разделителя и проверьте функцию DATE_FORMAT(дата, формат) для получения дополнительных форматов дат.

 5
Author: Rangel, 2015-07-09 18:12:37

Вы также можете сделать так, чтобы ваш запрос возвращал время в виде метки времени Unix. Это избавило бы от необходимости вызывать strtotime() и сделало бы работу немного менее интенсивной на стороне PHP...

select  UNIX_TIMESTAMP(timsstamp) as unixtime from the_table where id = 1234;

Затем в PHP просто используйте функцию date(), чтобы отформатировать ее так, как вы хотите.

<?php
  echo date('l jS \of F Y h:i:s A', $row->unixtime);
?>

Или

<?php
  echo date('F j, Y, g:i a', $row->unixtime);
?>

Мне нравится этот подход в отличие от использования функции MySQLDATE_FORMAT, потому что он позволяет повторно использовать один и тот же запрос для захвата данных и позволяет изменять форматирование в PHP.

Раздражает наличие двух разных запросов только для того, чтобы изменить внешний вид даты в пользовательском интерфейсе.

 3
Author: phatduckk, 2014-04-09 16:45:24

У вас могут возникнуть проблемы с датами, не возвращенными в метке времени Unix, так что это работает для меня...

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))
 1
Author: matt.j.crawford, 2012-02-16 23:52:33

Это сработает...

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
 1
Author: Mihir Vadalia, 2014-03-12 06:11:04

Используя PHP версии 4.4.9 и MySQL 5.0, это сработало для меня:

$oDate = strtotime($row['PubDate']);
$sDate = date("m/d/y",$oDate);
echo $sDate

PubDate является ли столбец в MySQL.

 0
Author: Peter Mortensen, 2014-04-09 16:47:30
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
 -1
Author: SagarPPanchal, 2013-12-02 13:00:47