Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Формат времени


Автор: kristina 7.4.2006, 16:17
У меня есть в таблице данных поле datetime, с текущей датой, в которую заносится с помощью функции now(). Она в формате 0000-00-00 00:00:00.
Как мне сделать так чтобы данные выводились в другом формате, например число-месяц-год ч:м Помогите пожалуйста! Я совсем не разбираюсь в mysql, буду ОЧЕНЬ признательна, если мне расскажут все в подробностях smile

Автор: Render 7.4.2006, 18:07
Можно так, при помощи ф-ции DATE_FORMAT();

SELECT date, DATE_FORMAT(date, '%M %d, %Y') FROM `твоя таблица`;

Форматирование дат:

%Y-Четырех значный год.
%y-Двухзначный год.
%M-Полное название месяца.
%b-Три первые буквы названия месяца.
%m-Двух значный месяц года (01...12).
%c-Месяц года (1...12).
%d-Двух значный день месяца (01...31).
%e-День месяца (1...31)
%r-Время в 12 часовом формате
%T-Время в 24 часовом формате
%H-Двухзначный час
%i-Двухзначная минута
%s-Двухзначная секунда

Автор: kristina 10.4.2006, 12:02
После запроса, табличку он мне выдал правильно, только вот в гостевой все равно формат времени старый.

Автор: Render 10.4.2006, 12:29
какой формат нужен, и на чем собственно гостевая...
Может дело даже не в базе?

Автор: kristina 10.4.2006, 12:49
Гостевая на php
Формат мне нужен примерно такой : 10.04.06 14:34

После такого запроса:
SELECT datetime, DATE_FORMAT(datetime, '%M %d, %Y') FROM `book`;
Появилась табличка

2006-04-05 17:15:00 April 05, 2006
2006-04-05 17:23:02 April 05, 2006

Но в самой гостевой формат времени не изменился, он остался таким же 2006-04-05 17:15:00


Автор: Render 10.4.2006, 13:02
Код PHP в студию...
Кусок который выводит дату...

Автор: kristina 10.4.2006, 13:07
Я просто печатаю переменную

$out = ' <tr ><td width="30%" class="smtab" valign="top"><b>'.$datetime.'</b>';
Добавлено @ 13:09
Так я умаю дело не в этом, потому что дата в самой таблице не изменилась

Автор: Render 10.4.2006, 13:16
Она и не должна изменится в таблице, ты просто формат вывода меняешь...
А как там переменная $datetime формируется?

Автор: kristina 10.4.2006, 13:48
в базу $datetime заносится с помощью функции now()

Автор: Ignat 10.4.2006, 14:17
Цитата(kristina @ 10.4.2006, 14:48 Найти цитируемый пост)
заносится с помощью функции now()

Это нормальный формат хранения даты.
Рекомендую ознакомиться с http://dev.mysql.com/doc/refman/4.1/en/datetime.html.

А ответ на вопрос уже был:
Цитата(Render @ 10.4.2006, 14:16 Найти цитируемый пост)
Она и не должна изменится в таблице, ты просто формат вывода меняешь...


Автор: kristina 10.4.2006, 14:56
вообще мне интересно, почему у меня не меняется формат при выводе даты в гостевой книге

Автор: Ignat 10.4.2006, 15:16
Цитата(kristina @ 10.4.2006, 15:56 Найти цитируемый пост)
вообще мне интересно, почему у меня не меняется формат при выводе даты в гостевой книге

Гм... Понял =)


Код

SELECT DATE_FORMAT(`datetime`, '%d %m %Y') AS `datetime` FROM `book`; 
/*не забываем экранировать имена полей, если они совпадают с ключевым словом!*/


А так? smile

Автор: kristina 10.4.2006, 16:01
нет, все равно выдает прежний формат smile

Автор: Ignat 10.4.2006, 16:15
Цитата(kristina @ 10.4.2006, 17:01 Найти цитируемый пост)
нет, все равно выдает прежний формат

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

Тему пермещаю в PHP.

Автор: kristina 10.4.2006, 16:28
пжлста smile

SELECT DATE_FORMAT(`datetime`, '%d %m %Y') AS `datetime` FROM `book`;

SQL-запрос:
SELECT DATE_FORMAT( `datetime` , '%d %m %Y' ) AS `datetime`
FROM `book`
LIMIT 0 , 30

datetime
10 04 2006
10 04 2006
10 04 2006
----------------------------------------
SELECT datetime, DATE_FORMAT(datetime, '%M %d, %Y') FROM `book`;

SQL-запрос:
SELECT datetime, DATE_FORMAT( datetime, '%M %d, %Y' )
FROM `book`
LIMIT 0 , 30

datetime DATE_FORMAT(datetime, '%M %d,
%Y')
2006-04-05 17:15:00 April 05, 2006
2006-04-05 17:23:02 April 05, 2006
2006-04-06 16:50:12 April 06, 2006

Автор: Ignat 10.4.2006, 16:33
kristina, Я имел ввиду PHP-код smile

Автор: kristina 11.4.2006, 11:25
вот этот?

Код

function gb_show($page)
{
    $begin = ($page - 1) * 10;

  db_query("SELECT DATE_FORMAT(datetime, '%d %m %Y') AS datetime FROM gb"); 
  $result = db_query('SELECT * FROM gb ORDER BY datetime DESC LIMIT '.$begin.','.RECSPERPAGE); 

  while($row = db_fetch_array($result))
  {
    $out .= template_show_body($row['id'], $row['name'], $row['email'], $row['www'],  $row['sity'], $row['message'], $row['datetime']);
  }

  db_free_result($result);
  print $out;
}



Запрос к БД

Код

function db_query($query)
{
  $result = @mysql_query($query) or die('Не могу сделать запрос к БД ');
  return $result;
}


Автор: Render 11.4.2006, 11:42
Код

function gb_show($page)
{
    $begin = ($page - 1) * 10;

  db_query("SELECT DATE_FORMAT(datetime, '%d %m %Y') AS datetime FROM gb"); 
  $result = db_query('SELECT * , DATE_FORMAT(`datetime`, '%d %m %Y %T') AS `datetime`
FROM `gb` 
ORDER BY `datetime` DESC LIMIT '.$begin.','.RECSPERPAGE); 

  while($row = db_fetch_array($result))
  {
    $out .= template_show_body($row['id'], $row['name'], $row['email'], $row['www'],  $row['sity'], $row['message'], $row['datetime']);
  }

  db_free_result($result);
  print $out;
}


Попробуй так, у меня нормально отработал!

На самом деле вот эту строку можно вообще убрать!
Код

db_query("SELECT DATE_FORMAT(datetime, '%d %m %Y') AS datetime FROM gb");

Автор: kristina 11.4.2006, 12:13
теперь вообще дат не пишет smile

Автор: kristina 11.4.2006, 12:46
smile) я нашла у себя ошибку! теперь все работает! все супер! спасибо большое всем! smile

Автор: Ignat 11.4.2006, 12:59
Цитата(Render @ 11.4.2006, 12:42 Найти цитируемый пост)
На самом деле вот эту строку можно вообще убрать!

Не "можно", а нужно! Это лишняя нагрузка на БД.

Автор: Render 11.4.2006, 12:59
В чём фишка то была?

Автор: kristina 11.4.2006, 13:14
работает это
Код

 $result = db_query('SELECT * , DATE_FORMAT(`datetime`, '%d %m %Y %T') AS `datetime`
FROM `gb` 
ORDER BY `datetime` DESC LIMIT '.$begin.','.RECSPERPAGE);


просто я дальше наисправляла, сейчас все ОК

Автор: Ignat 11.4.2006, 13:24
kristina, еще не рекомендуется использовать конструкцию

SELECT *, ...

Т.е. вместо звездочки перечислять только те поля, которые нужны в выборке.

Автор: Render 11.4.2006, 13:39
А не всё ли равно, у нее наверняка там всё поля и выбираются...

Автор: Ignat 11.4.2006, 13:47
Цитата(Render @ 11.4.2006, 14:39 Найти цитируемый пост)
А не всё ли равно,

Даже если программисту все равно, то SQL - серверу нет.

Автор: kristina 11.4.2006, 13:58
ок, спасибо, учту на будущие smile

Автор: kristina 14.4.2006, 15:35
Я тут обратила внимание, что после изменения кода на

Код

$result = db_query("SELECT * , DATE_FORMAT( datetime, '%d-%m-%Y %H:%i' ) AS datetime FROM `gb` ORDER BY datetime DESC LIMIT ".$begin.",".RECSPERPAGE); 


У меня перестали правильно сортироваться записи в гостевой книге

До какого-то момента сортировка идет правильно, а потом сообщения начинаются вставляться не по порядку.
Если поставить

Код

$result = db_query('SELECT * FROM gb ORDER BY datetime DESC LIMIT '.$begin.','.RECSPERPAGE);


то все сообщения сортируются по порядку

Автор: Ignat 17.4.2006, 15:30
kristina, для начала избавьтесь от звездочки в запросе.
Затем попробуйте разобраться по какому полю идет сортировка. Наводка: в данном запросе есть неоднозначность.
Задача: отсортируйте по нужному полю, избавившись от неоднозначности.

Если что-то станет непонятно, пишите. 

Автор: Reptor 17.4.2006, 16:35
Цитата

еще не рекомендуется использовать конструкцию

SELECT *, ...

Т.е. вместо звездочки перечислять только те поля, которые нужны в выборке. 


Не помню в какой но  в какойто очень хорошой статье писали что наоборот лече использовать *

 

Автор: Ignat 17.4.2006, 17:01


Цитата(Reptor @  17.4.2006,  17:35 Найти цитируемый пост)
Не помню в какой но  в какойто очень хорошой статье писали что наоборот лече использовать *

Если в статье написано, что лучше использовать *, то я очень сомневаюсь, что эта статья очень хорошая. Точнее я уверен в обратном.
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)