Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как изменить формат даты?
Форумы портала PHP.SU » » Вопросы новичков » Как изменить формат даты?

Страниц (1): [1]
 

1. Rooner - 26 Сентября, 2011 - 13:23:39 - перейти к сообщению
В базе mysql есть поле, которое имеет тип datetime, все значения хранятся в таком формате: 2011-09-26 15:31:07
На php извлекаю эту дату из базы и хочу изменить ее формат, с помощью какой функции это можно сделать? Нужно получить дату в формате день.месяц.год без времени.
Пробовал date_format, но в обратку получаю сообщения о не соответствии типов.
2. Crazy_maker - 26 Сентября, 2011 - 13:28:07 - перейти к сообщению
а самому написать скрипт сложно что ли? Внеси в переменную, потом просто переставь местами и лишнее удали. А функция
3. Мелкий - 26 Сентября, 2011 - 13:31:53 - перейти к сообщению
Rooner пишет:
Пробовал date_format, но в обратку получаю сообщения о не соответствии типов.

Аргументы местами не напутали?
http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]tion_date-format
4. Viper - 26 Сентября, 2011 - 13:33:07 - перейти к сообщению
Crazy_maker зачем городить огород?

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DATE_FORMAT(`date_field`, '%d.%m.%Y') AS formated_date FROM ...
получим из 2011-09-26 15:31:07 дату вида 26.09.2011
Если нужно год из двух цифр, то заменить %Y на %y
5. Rooner - 26 Сентября, 2011 - 13:57:20 - перейти к сообщению
Мелкий, Viper можно и в запросе сразу формат сменить, но это не удобно, мне нужна php функция.
Crazy_maker написать самому то не проблема, но предпалагаю что такая функция уже есть, вот ее название и хотел бы узнать. Не первый раз сталкиваюсь с преобразованием даты, и писать или копировать специальную функцию тоже както не рационально.
Но что поделать, пошел писать Улыбка
6. Мелкий - 26 Сентября, 2011 - 14:03:09 - перейти к сообщению
strtotime да date.
Вот только чем неудобно сразу запросить дату в нужном формате?
7. illy - 26 Сентября, 2011 - 14:11:28 - перейти к сообщению
лучше наверное хранить дату в виде 1535345578 который даёт time()
а потом выводить её как хотите.
Да и поиск и сортировка по дате будут быстрее
8. Viper - 26 Сентября, 2011 - 14:13:50 - перейти к сообщению
Rooner пишет:
но это не удобно, мне нужна php функция.
это удобно и правильно, т.к. mysql отработает быстрее.
9. Rooner - 26 Сентября, 2011 - 14:20:49 - перейти к сообщению
Мелкий пишет:
strtotime да date.
Вот только чем неудобно сразу запросить дату в нужном формате?


Сразу не всегда удобно, у меня запрос к базе осуществляется с помощью функции, которая используется во многих местах. Изменять эту функцию не хочется, да и не нужно, т.к. в ней будут лишние обработчики висеть для всех остальных запросов.
Чтото не так я делаю с этими date и strtodate:
echo date(strtotime($row["created"], "d.m.Y"));
Warning: strtotime() expects parameter 2 to be long, string given in...

illy пишет:
лучше наверное хранить дату в виде 1535345578 который даёт time()
а потом выводить её как хотите.
Да и поиск и сортировка по дате будут быстрее


Хм, как вариант, хотя это почти тоже самое

Вобщем самое элементарное решение для моего случая это тупая функция:
PHP:
скопировать код в буфер обмена
  1.     $y = $str[0].$str[1].$str[2].$str[3];
  2.     $m = $str[5].$str[6];
  3.     $d = $str[8].$str[9];
  4.     return $d.".".$m.".".$y;

Спасибо всем за советы, впринципе пока вопросов нет.
10. LIME - 26 Сентября, 2011 - 14:32:30 - перейти к сообщению
хотелось бы узнать чем выгоднее использовать тип DATETIME чем TIMESTAMP
или наоборот
11. Viper - 26 Сентября, 2011 - 14:49:19 - перейти к сообщению
LIME имхо удобнее выполнять преобразования над timestamp, хотя опять же имхо timestamp для даты ранее 1970 года смотрится странновато Улыбка
12. LIME - 13 Октября, 2011 - 07:22:29 - перейти к сообщению
timestamp изменяется автоматически при любом изменении записи
навсякий, для тех кто тоже был не в курсе
13. Мелкий - 13 Октября, 2011 - 09:30:49 - перейти к сообщению
LIME пишет:
timestamp изменяется автоматически при любом изменении записи

Нет. Только тогда это ему указано через on update CURRENT_TIMESTAMP
14. LIME - 13 Октября, 2011 - 09:43:28 - перейти к сообщению
Мелкий перепроверил
CODE (SQL):
скопировать код в буфер обмена
  1. ALTER TABLE  `nomera` ADD  `t` TIMESTAMP NOT NULL

дефолт CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP проставились автоматически
а если
CODE (SQL):
скопировать код в буфер обмена
  1. ALTER TABLE  `nomera` ADD  `t` TIMESTAMP
то нет

 

Powered by ExBB FM 1.0 RC1