У меня есть столбец datetime в MySQL.
Как я могу преобразовать его в отображение как мм / дд / гг H: M (AM / PM) с помощью PHP?
Они хранятся не во времени unix, как и обычная дата, PHP - это тот, который обрабатывает их как секунды и прочее. Я бы порекомендовал вам использовать функции даты и времени PHP OOP, они очень просты в использовании.
Могу ли я порекомендовать и альтернативу вашему формату даты? mm/dd/yy очень американский, и те из нас, кто живет в других частях мира, становятся более чем немного раздраженными, пытаясь перебрать, что имеется в виду под 11-12-13. Более универсальным стандартом является yyyy-mm-dd, который является частью стандарта ISO 8601. В противном случае вы должны использовать месяц имя, а не число.






Более простой способ - отформатировать дату непосредственно в запросе MySQL, а не в PHP. См. Ручной ввод MySQL для DATE_FORMAT.
Если вы предпочитаете делать это на PHP, тогда вам понадобится функция датировать, но сначала вам нужно будет преобразовать значение вашей базы данных в метку времени.
-1, потому что форматирование даты в БД - плохая идея. Для многоязычной сети нужны разные форматы даты, а затем вам нужно отформатировать дату в PHP (общий язык бизнес-логики). Когда вы писали о функции date, вам следует также написать о функции strottime, чтобы помочь кому-то, а не «но сначала вам придется преобразовать значение вашей базы данных в метку времени».
Используйте функцию датировать:
<?php
echo date("m/d/y g:i (A)", $DB_Date_Field);
?>
Разве функция date () не ожидает целочисленной метки времени, а не даты и времени, указанной в вопросе?
Чтобы преобразовать дату, полученную из 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 для настройки формата.
Откуда должен быть этот объект $row?
Я могу ошибаться, но я думаю, что некоторые из вас упускают из виду суть. Он хочет, чтобы результат был в формате «m / d / y g: i A», извлекая исходную дату из поля DATETIME. Итак, его код работает. @Mike $ row-> createdate - это просто столбец даты и времени Тима.
Ответ @AsTeR сбивает с толку, только если вы неправильно прочитали вопрос. OP ответил на свой вопрос и хочет взять дату из MySQL и вывести в запрошенный формат: мм / дд / гг H: M (AM / PM).
@TimBoland Я думаю, что ответ можно было бы улучшить, если бы был подчеркнут из, а также запрошенный формат мм / дд / гг H: M (AM / PM). И ему может быть полезна ссылка на функцию даты. Я пытался предложить правку, но это было отклонено.
@toxalot и, конечно же, мы все трижды прочитали вопрос целиком, прежде чем перейти к копированию и вставке кода ответа;)
Интересный факт: этот ответ примерно эквивалентен тому, который находится чуть ниже (который практически не имеет отрицательных голосов), но он получил более 40 отрицательных голосов, потому что он отвечает на вопрос OP, который отличается от того, который на самом деле есть у людей, которые приходят на эту страницу.
Используйте это для вывода DateTime из MySql, например, в. веб-страница в ~ английском формате.
Вы также можете сделать так, чтобы ваш запрос возвращал время как временную метку 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);
?>
Мне нравится этот подход в отличие от использования функции DATE_FORMATMySQL, потому что он позволяет повторно использовать тот же запрос для получения данных и позволяет изменять форматирование в PHP.
Раздражает наличие двух разных запросов только для того, чтобы изменить способ отображения даты в пользовательском интерфейсе.
Мне нравится идея использования UNIX_TIMESTAMP для устранения необходимости в strtotime. Этот ответ был бы лучше, если бы он дал пример форматирования времени в формате, который фактически запрашивал OP.
Если вы используете PHP 5, вы также можете попробовать
$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
Как указано выше в комментариях, стандартный формат - ("Y-m-d H:i:s").
Используя PHP версии 4.4.9 и MySQL 5.0, это сработало для меня:
$oDate = strtotime($row['PubDate']);
$sDate = date("m/d/y",$oDate);
echo $sDate
PubDate - это столбец в MySQL.
Это не преобразует дату в формат, запрошенный OP
У вас могут быть проблемы с датами, которые не возвращаются в Unix Timestamp, так что это работает для меня ...
return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))
Это не преобразует дату в формат, запрошенный OP.
Если вы ищете способ нормализовать дату в формате 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, которую предоставил этот ответ, даже если он не дал прямого ответа на вопрос, который сейчас существует)
этот ответ сбивает с толку тему
'Y-m-d H: i: s' - правильный стандартный формат даты и времени (прочтите руководство по MySQL, во всех примерах используется этот формат)
@ 0xBAADF00D: пожалуйста, прочтите вопрос еще раз ... никто не спрашивал о стандартном формате MySQL.
конечно, но когда стандарт существует, было бы неплохо следовать стандарту (это позволит избежать головной боли позже, когда другой разработчик будет работать над вашим кодом) xD
Не могли бы вы сказать мне, каким будет preg_match для "m / d / y g: i: s"?
Вопрос просит выводить в формате мм / дд / гг H: M (AM / PM), а не «Y-m-d H: i: s».
does not work для кого? Принятый ответ будет работать, если вы хотите преобразовать из MySQL в мм / дд / гг H: M (AM / PM) в соответствии с запросом OP. Тот факт, что вы хотите сделать обратное, не делает принятый ответ неправильным.
Используйте это, чтобы преобразовать дату, вводимую пользователем на английском языке, чтобы сохранить как правильный MySQL.
Большое спасибо! Эта проблема беспокоила меня довольно долгое время. Так приятно видеть такой простой пример.
Это должно отформатировать поле в запросе SQL:
SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename
Вы должны указать запрос MySQL, а не только SQL, потому что это не обязательно будет работать со всеми базами данных. Хотя OP запросил решение PHP, это хорошая альтернатива, о которой OP, возможно, не знал. Однако это не обеспечит запрошенный формат. Чтобы получить запрашиваемый формат OP, вам понадобится '%m/%d/%y %h:%i %p'.
Забыть все. Просто используйте:
$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))
$valid_date = date( 'm/d/y g:i A', strtotime($date));
Справка:http://php.net/manual/en/function.date.php
Я думаю, что люди голосуют против, потому что они не уверены в вопросе OP. Большинство считает вопрос противоположным тому, чем он является на самом деле. Другая возможность заключается в том, что это очень похоже на принятый ответ, который был опубликован 5+ лет назад.
Ссылка, на которую вы ссылаетесь, не указывает на используемую вами функцию и не объясняет формат. Думаю, лучше бы php.net/function.date.php.
@toxalot Принятый ответ неверен. Он отредактирован после моего ответа и по поводу моей ссылки я заменяю вашу ссылку. Спасибо
У всех этих вопросов и ответов грязная история. Принятый ответ был неверен между 29 апреля 2013 г. и 24 мая 2013 г. Он был правильным, когда вы впервые опубликовали свой ответ. Ваш ответ был неверен до 29 мая 2013 г., после чего он стал очень похож на принятый ответ.
Чтобы правильно отформатировать объект 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.
MySQL фактически не использует этот формат, и MySQL генерирует предупреждение, если вы включаете генерируемый им указатель часового пояса «+ xxxx». ОБНОВЛЕНИЕ X SET Y = '2014-03-31T15: 00: 00 + 0100', где Z; Запрос выполнен, затронуты 0 строк, 1 предупреждение (0,06 сек) Сопоставленных строк: 1 Изменено: 0 предупреждений: 1
OP хочет взять дату в формате из MySQL и преобразовать кмм / дд / гг H: M (AM / PM).
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
Это не ответ на вопрос OP. OP хочет взять дату в формате из MySQL и преобразовать кмм / дд / гг H: M (AM / PM). Это наоборот. Кроме того, он принимает ввод из формы, а не из базы данных.
В зависимости от вашей конфигурации 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));
}
Это не ответ на вопрос OP. OP хочет взять дату в формате из MySQL и преобразовать кмм / дд / гг H: M (AM / PM). Кроме того, это просто отформатирует текущее время, а не конкретную дату.
Это сработает ...
echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
В этом формате 24 часа смешиваются с AM / PM. В остальном это тот же ответ, что и принятый ответ, опубликованный более 5 лет назад.
Наконец, правильное решение для PHP 5.3 и выше: (добавлен дополнительный часовой пояс в пример, как указано в комментариях)
$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date, new \DateTimeZone('UTC'));
$date->setTimezone(new \DateTimeZone('Europe/Berlin')); // optional
echo $date->format('m/d/y h:i a');
его ошибка .. Класс "App \ Controller \ DateTime" не найден .. с использованием php 6.4
Если вы работаете в другом пространстве имен, вы должны называть его с обратной косой чертой перед ним: \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
Не забудьте указать часовой пояс при создании объекта даты! В противном случае ваша отформатированная дата может быть на несколько часов позже. Ваши столбцы datetime должны быть в формате UTF8, поэтому передайте new DateTimeZone('UTC') в качестве третьего параметра, чтобы убедиться, что PHP знает.
Это правильный ответ, который выводит желаемый формат OP, просто позаботьтесь о часовых поясах
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 (дата, формат) для получения дополнительных форматов даты.
Предлагаемый мной подход работает следующим образом. Сначала вы создаете базовый объект datetime из строки в формате mysql; а затем форматируете его так, как вам нравится. К счастью, mysql datetime соответствует стандарту ISO8601, поэтому сам код может выглядеть довольно просто и элегантно. Однако имейте в виду, что в столбце datetime нет информации о часовом поясе, поэтому вам нужно преобразовать его соответствующим образом.
Вот код:
(new ISO8601Formatted(
new FromISO8601('2038-01-19 11:14:07'),
'm/d/Y h:iA'
))
->value();
Он выводит 01/19/2038 11:14AM - надеюсь, то, что вы ожидаете.
В этом примере используется библиотека безе. Вы можете посмотри еще немного, если хотите.
Что нам нужно знать, так это то, как дата хранится в SQL. Это Timestamp, Datetime или unixtime?