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

StackOverflow https://stackoverflow.com/questions/136782

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Как я могу преобразовать его для отображения в виде мм/дд/гг Ч: М (УТРА/вечера) используете PHP?

Это было полезно?

Решение 2

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

Другие советы

Если вы ищете способ нормализовать дату в формате 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, которую предоставил этот ответ, даже если он не давал прямого ответа на вопрос, который сейчас существует)

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

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
$valid_date = date( 'm/d/y g:i A', strtotime($date));

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

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

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
echo $date->format('m/d/y h:i a');

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

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

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

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))

Чтобы правильно отформатировать 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

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

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename

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

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>

В зависимости от вашей конфигурации MySQL datetime.Обычно: 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));
}
SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

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

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

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

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

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

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

Вы также можете заставить свой запрос возвращать время в виде временной метки 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's DATE_FORMAT функция, потому что она позволяет вам повторно использовать один и тот же запрос для получения данных и позволяет вам изменять форматирование в PHP.

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

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

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))

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

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));

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

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

PubDate находится ли столбец в MySQL.

$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top