Преобразование из MySQL datetime в другой формат с PHP
У меня есть datetime
столбец в MySQL.
Как я могу преобразовать его в дисплей, как mm / dd / yy H: M (AM/PM) использование PHP?
17 ответов
если вы ищете способ нормализовать дату в формате 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 этот ответ предоставил, даже если он не " непосредственно ответил на вопрос, который теперь существует)
чтобы преобразовать дату, полученную из 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 настройки формата.
Если вы используете PHP 5, вы также можете попробовать
$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
наконец, правильное решение для 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, то вам нужно дата функция, но сначала вам нужно преобразовать значение базы данных в метку времени.
для правильного форматирования a DateTime
объект в PHP для хранения в MySQL использует стандартизированный формат, который использует MySQL, который является ISO 8601.
PHP сохранил этот формат как константу с версии 5.1.1, и я настоятельно рекомендую использовать его, а не вручную вводить строку каждый раз.
$dtNow = new DateTime();
$mysqlDateTime = $dtNow->format(DateTime::ISO8601);
This и список других констант 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 - коде, чтобы показать ожидаемый формат даты, измените его в источнике-своей базе данных.
важно назвать строки с помощью as оператор, как в примере выше (как 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)))
используя PHP версии 4.4.9 и MySQL 5.0, это сработало для меня:
$oDate = strtotime($row['PubDate']);
$sDate = date("m/d/y",$oDate);
echo $sDate
PubDate
- это столбец в MySQL.