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

378

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

Как преобразовать его в дисплей как mm/dd/yy H: M (AM/PM) с помощью PHP?

  • 4
    Нам нужно знать, как дата хранится в SQL. Это метка времени или дата-время или unixtime?
  • 0
    Они хранятся не во время Unix, как обычная дата, PHP - это то, что обрабатывается как секунды и прочее. Я бы порекомендовал вам использовать функции datetime PHP OOP , они очень просты в использовании.
Показать ещё 1 комментарий
Теги:
datetime

17 ответов

297
Лучший ответ

Чтобы преобразовать дату, полученную из 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.

  • 5
    Возможно, сработало, но это не стандартный формат MySQL.
  • 330
    Стандартный формат MySQL: date("Ymd H:i:s", $datetime)
Показать ещё 8 комментариев
447

Если вы ищете способ нормализации даты в формате 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 ) используется эта временная метка и функция = "noreferrer" > date PHP

  • 9
    Спасибо, это будет последний раз, когда я просто копирую и вставляю перед чтением комментариев.
  • 16
    этот ответ сбивает с толку тему
Показать ещё 8 комментариев
100

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

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
  • 2
    +1 Это путь, если у вас есть PHP 5> = 5.2.0
  • 0
    Как указано выше в комментариях, стандартный формат ("Ymd H:i:s")
Показать ещё 1 комментарий
29
$valid_date = date( 'm/d/y g:i A', strtotime($date));

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

  • 0
    Я думаю, что люди понижают голос, потому что они смущены вопросом OP. Большинство читают вопрос, чтобы быть противоположностью того, что есть на самом деле. Другая возможность состоит в том, что это очень похоже на принятый ответ, который был опубликован 5+ лет назад.
  • 1
    Ссылка, на которую вы ссылаетесь, не указывает на функцию, которую вы используете, и не объясняет формат. Я думаю, что php.net/function.date.php будет лучше.
Показать ещё 2 комментария
12

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

$date = DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
echo $date->format('m/d/y h:i a');
  • 0
    его ошибка .. Класс 'App \ Controller \ DateTime' не найден .. Использование PHP 6.4
  • 0
    Если вы работаете в другом пространстве имен, вы должны вызывать его с обратной косой чертой перед ним: \DateTime::createFromFormat('Ymd H:i:s', $mysql_source_date);
12

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

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

  • 10
    -1 потому что форматирование даты в БД не очень хорошая идея. Мультиязычному вебу нужны разные форматы даты, а затем вам нужно отформатировать дату в PHP (общий язык бизнес-логики). Когда вы писали о функции date , вы должны были strottime о функции strottime чтобы помочь кому-то вместо того, чтобы «но вам сначала нужно будет преобразовать значение вашей базы данных в метку времени».
  • 0
    предварительное форматирование даты не является хорошей и масштабируемой идеей
10

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

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))
  • 3
    -1, это не соответствует формату, запрошенному OP.
  • 1
    Ужасное решение
9

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

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

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

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

  • 0
    MySQL на самом деле не использует этот формат, и MySQL генерирует предупреждение, если вы включаете сгенерированный им указатель часового пояса "+ xxxx". ОБНОВЛЕНИЕ X SET Y = '2014-03-31T15: 00: 00 + 0100' где Z; Запрос в порядке, затронуто 0 строк, 1 предупреждение (0,06 с) Соответствие строк: 1 Изменено: 0 Предупреждений: 1
  • 0
    ОП хочет взять дату из формата MySQL и преобразовать в мм / дд / гг ч: М (AM / PM) .
8

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

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename
  • 0
    Вы должны указать MySQL запрос, а не только SQL, потому что это не обязательно будет работать со всеми базами данных. Хотя OP попросил PHP-решение, это хорошая альтернатива, о которой OP может и не знать. Однако это не обеспечит запрашиваемый формат. Чтобы получить запрошенный формат OP, вам понадобится '%m/%d/%y %h:%i %p' .
7

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

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>
  • 0
    Смотрите ниже, что работает лучше для меня:
  • 24
    Разве функция date () не ожидает целую отметку времени, а не дату и время, указанные в вопросе?
Показать ещё 1 комментарий
5
SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

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

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

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

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

Пример: 5.August.2015

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

5

В зависимости от вашей конфигурации datetime 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));
}
  • 1
    Это не отвечает на вопрос ОП. ОП хочет взять дату из формата MySQL и преобразовать в мм / дд / гг ч: М (AM / PM) . Плюс это будет просто форматировать текущее время, а не конкретную дату.
3

Вы также можете вернуть свой запрос как временную метку 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);
?>

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

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

  • 0
    Мне нравится идея использования UNIX_TIMESTAMP для устранения необходимости использования strtotime . Этот ответ был бы лучше, если бы он приводил пример форматирования времени в фактически запрошенном формате OP.
1

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

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
  • 1
    Этот формат смешивается 24 раза с AM / PM. В остальном это тот же самый ответ, который был опубликован 5+ лет назад.
1

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

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))
  • 1
    Это не преобразует дату в формат, запрошенный OP.
0
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
  • 1
    Это не отвечает на вопрос ОП. ОП хочет взять дату из формата MySQL и преобразовать в мм / дд / гг ч: М (AM / PM) . Это делает наоборот. Кроме того, он принимает данные из формы, а не из базы данных.
0

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

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

PubDate - столбец в MySQL.

  • 0
    Это не преобразует дату в формат, запрошенный OP
Сообщество Overcoder
Наверх
Меню