Нам нужно знать, как дата хранится в SQL. Это метка времени или дата-время или unixtime?
Олафур Вааге
Они хранятся не во время Unix, как обычная дата, PHP - это то, что обрабатывается как секунды и прочее. Я бы порекомендовал вам использовать функции PHP OOPdatetime, они очень просты в использовании.
Гучо Са
2
Могу ли я порекомендовать и альтернативу вашему формату даты? mm/dd/yyочень американец, и те из нас, кто живет в других частях света, становятся более чем раздражительными, пытаясь угадать, что имеется в виду 11-12-13. Более универсальный стандарт является yyyy-mm-ddи является частью стандарта ISO 8601. В противном случае вы должны использовать название месяца , а не номер.
Мэнго
Ответы:
515
Если вы ищете способ нормализовать дату в формате MySQL, используйте следующее
Строка $phpdate = strtotime( $mysqldate )принимает строку и выполняет серию эвристик, чтобы превратить эту строку в метку времени Unix.
Строка $mysqldate = date( 'Y-m-d H:i:s', $phpdate )использует эту метку времени и dateфункцию PHP, чтобы превратить эту метку обратно в стандартный формат даты MySQL.
( Примечание редактора : этот ответ приведен здесь из-за оригинального вопроса с непонятной формулировкой и общей полезности Google, предоставленной этим ответом, даже если он не 'прямо ответил на вопрос, который существует в настоящее время)
@ 0xBAADF00D: пожалуйста, прочитайте вопрос еще раз ... никто не спрашивал о стандартном формате MySQL.
user7116
3
конечно, но, когда стандарт существует, было бы неплохо следовать стандарту (это позволит избежать головной боли позже, когда другой разработчик поработает над вашим кодом) xD
0xBAADF00D
4
Вопрос просит выводить в формате мм / дд / гг ч: м (AM / PM), а не «Гмд ч: i: s».
Рикки
6
does not workдля кого? Принятый ответ будет работать, если вы хотите конвертировать из MySQL в mm / dd / yy H: M (AM / PM) в соответствии с запросом OP. То, что вы хотите сделать обратное, не делает принятый ответ неправильным.
Токсалот
311
Чтобы преобразовать дату, полученную из MySQL, в запрошенный формат ( mm/dd/yy H:M (AM/PM)):
Я могу ошибаться, но я думаю, что некоторые из вас упускают суть. Он хочет, чтобы выходные данные были в формате «m / d / yg: i A», извлекая исходную дату из поля DATETIME. Так что его код работает. @Mike $ row-> createate - это просто столбец даты и времени Тима.
Mere Development
4
Ответ @AsTeR сбивает с толку, только если вы неправильно прочитали вопрос. ОП ответил на свой вопрос и хочет взять дату из MySQL и вывести в запрошенный формат: мм / дд / гг ч: М (AM / PM) .
Токсалот
@TimBoland Я думаю, что ответ мог бы быть улучшен, если бы был выделен из, а также запрошенный формат мм / дд / гг ч: M (AM / PM) . И это могло бы извлечь выгоду из ссылки на функцию даты. Я пытался предложить редактирование , но оно было отклонено.
Токсалот
1
Интересный факт: этот ответ примерно эквивалентен ответу чуть ниже (у которого практически нет отрицательных голосов), но он получил> 40 отрицательных голосов, потому что он отвечает на вопрос ОП, который отличается от того, который на самом деле имеют люди, которые приходят на эту страницу.
Климент
110
Если вы используете PHP 5, вы также можете попробовать
Я думаю, что люди понижают голос, потому что они смущены вопросом OP. Большинство читают вопрос, чтобы быть противоположностью того, что есть на самом деле. Другая возможность состоит в том, что это очень похоже на принятый ответ, который был опубликован 5+ лет назад.
Токсалот
1
Ссылка, на которую вы ссылаетесь, не указывает на функцию, которую вы используете, и не объясняет формат. Я думаю, что php.net/function.date.php будет лучше.
Токсалот
@toxalot Принятый ответ неверен. Это отредактировано после моего ответа и о моей ссылке я заменяю вашу ссылку. Спасибо
Тони Старк
1
Весь этот Q & A имеет грязную историю. Принятый ответ был неверным в период с 29 апреля 2013 года по 24 мая 2013 года. Он был правильным, когда вы впервые опубликовали свой ответ. Ваш ответ был неверным до 29 мая 2013 года, после чего он стал очень похож на принятый ответ.
Токсалот
24
Наконец, правильное решение для PHP 5.3 и выше:
(добавлен необязательный часовой пояс к примеру, как упомянуто в комментариях)
его ошибка .. Класс 'App \ Controller \ DateTime' не найден .. использующий php 6.4
aswzen
1
Если вы работаете в другом пространстве имен, вы должны назвать его с обратной косой чертой перед ним:\DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
Hasenpriester
2
Не забудьте указать часовой пояс при создании объекта даты! В противном случае ваша отформатированная дата может занять несколько часов. Ваши datetimeстолбцы должны быть UTF8, поэтому передайте new DateTimeZone('UTC')в качестве третьего параметра, чтобы PHP знал.
Эрик Сеастранд
Это правильный ответ, который выводит желаемый формат OP, просто позаботьтесь о часовых поясах
Бухгалтер م
12
Более простым способом было бы отформатировать дату непосредственно в запросе MySQL вместо PHP. См. Запись в MySQL для DATE_FORMAT. .
Если вы предпочитаете делать это на PHP, тогда вам нужна функция date , но вам сначала нужно будет преобразовать значение вашей базы данных в метку времени.
-1 потому что форматирование даты в БД не очень хорошая идея. Мультиязычному вебу нужны разные форматы даты, а затем вам нужно отформатировать дату в PHP (общий язык бизнес-логики). Когда вы писали о dateфункции, то вы должны написать о strottimeфункции также, чтобы помочь кому-то вместо того, чтобы «но вам сначала нужно будет преобразовать значение вашей базы данных в метку времени».
Чтобы правильно отформатировать DateTimeобъект в PHP для хранения в MySQL, используйте стандартизированный формат, который использует MySQL, то есть ISO 8601 .
В PHP этот формат хранится как константа начиная с версии 5.1.1, и я настоятельно рекомендую использовать его, а не каждый раз вводить строку вручную.
MySQL фактически не использует этот формат, и MySQL генерирует предупреждение, если вы включаете указатель часового пояса "+ xxxx", который генерируется им. ОБНОВЛЕНИЕ X SET Y = '2014-03-31T15: 00: 00 + 0100' где Z; Запрос в порядке, затронуто 0 строк, 1 предупреждение (0,06 с) Соответствующие строки: 1 Изменено: 0 Предупреждения: 1
Джордж Лунд
ОП хочет взять дату из формата MySQL и преобразовать в мм / дд / гг ч: М (AM / PM) .
Токсалот
8
Это должно отформатировать поле в запросе SQL:
SELECT DATE_FORMAT(`fieldname`,'%d-%m-%Y') FROM tablename
Вы должны указать MySQL запрос, а не только SQL, потому что это не обязательно будет работать со всеми базами данных. Хотя OP попросил PHP-решение, это хорошая альтернатива, о которой OP может и не знать. Однако это не обеспечит запрашиваемый формат. Чтобы получить требуемый формат OP, вам нужно '%m/%d/%y %h:%i %p'.
Это не отвечает на вопрос ОП. ОП хочет взять дату из формата MySQL и преобразовать в мм / дд / гг ч: М (AM / PM) . Плюс это будет просто форматировать текущее время, а не конкретную дату.
Токсалот
5
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)]. [Название месяца (январь .. декабрь)]. [Год, числовой, четыре цифры]
Вы также можете сделать так, чтобы ваш запрос возвращал время в виде метки времени 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.
Досадно иметь два разных запроса только для того, чтобы изменить внешний вид даты в пользовательском интерфейсе.
Мне нравится идея использования UNIX_TIMESTAMPдля устранения необходимости strtotime. Этот ответ был бы лучше, если бы он приводил пример форматирования времени в фактически запрошенном формате OP.
Токсалот
1
У вас могут быть проблемы с датами, которые не возвращаются в метке времени Unix, так что это работает для меня ...
return date("F j, Y g:i a", strtotime(substr($datestring,0,15)))
Подход, который я предлагаю, работает следующим образом. Во-первых, вы создаете базовый объект datetime из строки в формате mysql; а затем вы форматируете его так, как вам нравится. К счастью, mysql datetime соответствует ISO8601, поэтому сам код может выглядеть довольно просто и элегантно. Имейте в виду, что в этом datetimeстолбце нет информации о часовом поясе, поэтому вам необходимо соответствующим образом преобразовать ее .
Вот код:
(new ISO8601Formatted(newFromISO8601('2038-01-19 11:14:07'),'m/d/Y h:iA'))->value();
Выводит 01/19/2038 11:14AM - надеюсь, что вы ожидаете.
В этом примере используется библиотека безе. Вы можете проверить еще немного, если хотите.
Это не отвечает на вопрос ОП. ОП хочет взять дату из формата MySQL и преобразовать в мм / дд / гг ч: М (AM / PM) . Это делает наоборот. Кроме того, он принимает данные из формы, а не из базы данных.
OOP
datetime, они очень просты в использовании.mm/dd/yy
очень американец, и те из нас, кто живет в других частях света, становятся более чем раздражительными, пытаясь угадать, что имеется в виду11-12-13
. Более универсальный стандарт являетсяyyyy-mm-dd
и является частью стандарта ISO 8601. В противном случае вы должны использовать название месяца , а не номер.Ответы:
Если вы ищете способ нормализовать дату в формате MySQL, используйте следующее
Строка
$phpdate = strtotime( $mysqldate )
принимает строку и выполняет серию эвристик, чтобы превратить эту строку в метку времени Unix.Строка
$mysqldate = date( 'Y-m-d H:i:s', $phpdate )
использует эту метку времени иdate
функцию PHP, чтобы превратить эту метку обратно в стандартный формат даты MySQL.( Примечание редактора : этот ответ приведен здесь из-за оригинального вопроса с непонятной формулировкой и общей полезности Google, предоставленной этим ответом, даже если он не 'прямо ответил на вопрос, который существует в настоящее время)
источник
does not work
для кого? Принятый ответ будет работать, если вы хотите конвертировать из MySQL в mm / dd / yy H: M (AM / PM) в соответствии с запросом OP. То, что вы хотите сделать обратное, не делает принятый ответ неправильным.Чтобы преобразовать дату, полученную из MySQL, в запрошенный формат (
mm/dd/yy H:M (AM/PM)
):Обратитесь к параметрам форматирования даты PHP, чтобы настроить формат.
источник
$row
объект?Если вы используете PHP 5, вы также можете попробовать
источник
("Y-m-d H:i:s")
Ссылка: http://php.net/manual/en/function.date.php
источник
Наконец, правильное решение для PHP 5.3 и выше: (добавлен необязательный часовой пояс к примеру, как упомянуто в комментариях)
источник
\DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
datetime
столбцы должны быть UTF8, поэтому передайтеnew DateTimeZone('UTC')
в качестве третьего параметра, чтобы PHP знал.Более простым способом было бы отформатировать дату непосредственно в запросе MySQL вместо PHP. См. Запись в MySQL для DATE_FORMAT. .
Если вы предпочитаете делать это на PHP, тогда вам нужна функция date , но вам сначала нужно будет преобразовать значение вашей базы данных в метку времени.
источник
date
функции, то вы должны написать оstrottime
функции также, чтобы помочь кому-то вместо того, чтобы «но вам сначала нужно будет преобразовать значение вашей базы данных в метку времени».Забыть все. Просто используйте:
источник
Чтобы правильно отформатировать
DateTime
объект в PHP для хранения в MySQL, используйте стандартизированный формат, который использует MySQL, то есть ISO 8601 .В PHP этот формат хранится как константа начиная с версии 5.1.1, и я настоятельно рекомендую использовать его, а не каждый раз вводить строку вручную.
Это и список других констант PHP DateTime доступны по адресу http://php.net/manual/en/class.datetime.php#datetime.constants.types.
источник
Это должно отформатировать поле в запросе SQL:
источник
'%m/%d/%y %h:%i %p'
.Используйте функцию даты :
источник
В зависимости от вашей конфигурации даты и времени MySQL. Обычно: 2011-12-31 07:55:13 формат. Эта очень простая функция должна творить чудеса:
Или немного больше, чтобы соответствовать вопросу.
источник
Если вы не хотите изменять каждую функцию в вашем PHP-коде, чтобы показать ожидаемый формат даты, измените ее в источнике - вашей базе данных.
Важно , чтобы назвать строки с как оператором , как в приведенном выше примере (как dateFrom, так как dateUntil). Имена, которые вы пишете, есть имена, строки будут вызываться в вашем результате.
Выход этого примера будет
[День месяца, числовой (0..31)]. [Название месяца (январь .. декабрь)]. [Год, числовой, четыре цифры]
Пример: 5. августа 2015
Измените точки с выбранным разделителем и проверьте функцию DATE_FORMAT (дата, формат) для большего количества форматов даты.
источник
Вы также можете сделать так, чтобы ваш запрос возвращал время в виде метки времени Unix. Это избавило бы от необходимости вызывать
strtotime()
и сделать вещи немного менее интенсивными на стороне PHP ...Тогда в PHP просто используйте
date()
функцию, чтобы отформатировать ее так, как вам хочется.или
Мне нравится этот подход , в отличие от использования MySQL «ю.ш.
DATE_FORMAT
функции, так как она позволяет повторно использовать один и тот же запрос , чтобы захватить данные и позволяет изменять форматирование в PHP.Досадно иметь два разных запроса только для того, чтобы изменить внешний вид даты в пользовательском интерфейсе.
источник
UNIX_TIMESTAMP
для устранения необходимостиstrtotime
. Этот ответ был бы лучше, если бы он приводил пример форматирования времени в фактически запрошенном формате OP.У вас могут быть проблемы с датами, которые не возвращаются в метке времени Unix, так что это работает для меня ...
источник
Это будет работать ...
источник
Используя PHP версии 4.4.9 и MySQL 5.0, это сработало для меня:
PubDate
это столбец в MySQL .источник
Подход, который я предлагаю, работает следующим образом. Во-первых, вы создаете базовый объект datetime из строки в формате mysql; а затем вы форматируете его так, как вам нравится. К счастью, mysql datetime соответствует ISO8601, поэтому сам код может выглядеть довольно просто и элегантно. Имейте в виду, что в этом
datetime
столбце нет информации о часовом поясе, поэтому вам необходимо соответствующим образом преобразовать ее .Вот код:
Выводит
01/19/2038 11:14AM
- надеюсь, что вы ожидаете.В этом примере используется библиотека безе. Вы можете проверить еще немного, если хотите.
источник
источник