Страница 1 из 2

Дата и время

Добавлено: 29 июл 2012, 18:43
Fedya
Здравствуйте!
У меня пишет дату последнего посещения в виде

Код: Выделить всё

$cdate = date("Y-m-d G:i:s");
Последний раз был здесь 2012-07-29 00:19:34

а хочется, чтобы

Последний раз был здесь 1 день и 10 часов назад
а если день не прошел, то столько-то часов назад

Re: Дата и время

Добавлено: 30 июл 2012, 09:57
Alazaur

Код: Выделить всё

$oldtime = 1343631396; // TIMESTAMP последнего посещения $currenttime = time() - $oldtime;$days = floor($currenttime / 86400);$hours = floor(($currenttime - $days * 86400) / 3600);if($days) echo "Прошло: " . $days . " дней, " . $hours . " часов.";else if($hours) echo "Прошло: " . $hours . " часов.";else echo "Прошло менее часа";

Re: Дата и время

Добавлено: 30 июл 2012, 11:25
Fedya
Спасибо.

Т.е.
При посещении надо сделать так?

Код: Выделить всё

$cdate = time();$query = "INSERT INTO $table SET vkid='$uid', data='$cdate'";
записывает время посещения (а time разве записывает дату?)

а потом вывести из базы

Код: Выделить всё

$oldtime = $row['data']; // TIMESTAMP последнего посещения$currenttime = time() - $oldtime;$days = floor($currenttime / 86400);$hours = floor(($currenttime - $days * 86400) / 3600);if($days) echo "Прошло: " . $days . " дней, " . $hours . " часов.";else if($hours) echo "Прошло: " . $hours . " часов.";else echo "Прошло менее часа";

вот здесь я правильно присваиваю?

Код: Выделить всё

$oldtime = $row['data'];

Re: Дата и время

Добавлено: 30 июл 2012, 11:31
Alazaur
ну да как-то так.
time() возвращает TIMESTAMP (время в секундах прошедшее с 1 января 1970 года до настоящего времени).
То есть констукции:

Код: Выделить всё

$cdate = date("Y-m-d G:i:s");
и

Код: Выделить всё

$cdate = date("Y-m-d G:i:s", time());
аналогичны

Re: Дата и время

Добавлено: 30 июл 2012, 12:04
Fedya
Не понял еще одно,
вот тут

Код: Выделить всё

$oldtime = 1343631396; // TIMESTAMP последнего посещения
как записать время последнего посещения в секундах

Re: Дата и время

Добавлено: 30 июл 2012, 12:07
Fedya
Получается тут мы отнимаем от меньшего большое, нет?

Код: Выделить всё

$currenttime = time() - $oldtime;

Re: Дата и время

Добавлено: 30 июл 2012, 12:17
gpv123

Re: Дата и время

Добавлено: 30 июл 2012, 12:20
Fedya
аа, я забываю, что это не сам 1970 год :D

Re: Дата и время

Добавлено: 30 июл 2012, 12:20
Alazaur
В базе создаете поле типа INT и в него записываете, когда пользователь посетил.
Например:

Код: Выделить всё

mysql_query("UPDATE " . $table . " SET date=" . time() . " WHERE vkid = " . $uid);
А когда надо то берете его

Код: Выделить всё

$array = mysql_fetch_assoc(mysql_query("SELECT * FROM " . $table . " WHERE vkid = " . $uid)); $oldtime = $array['date']; // TIMESTAMP последнего посещения$currenttime = time() - $oldtime;$days = floor($currenttime / 86400);$hours = floor(($currenttime - $days * 86400) / 3600);if($days) echo "Прошло: " . $days . " дней, " . $hours . " часов.";else if($hours) echo "Прошло: " . $hours . " часов.";else echo "Прошло менее часа"; //Так же можете его использовать и в таких конструкциях:echo "Дата последнего посещения: " . date("Y-m-d G:i:s", $array['date']);
Fedya писал(а):Получается тут мы отнимаем от меньшего большое, нет?

Код: Выделить всё

$currenttime = time() - $oldtime;
Почему же, если пользователь был неделю назад, то TIMESTAMP будет меньше чем тот который сейчас. Например 5 минут назад TIMESTAMP был на 300 меньше чем сейчас.

P.S. Уже без меня ответили :D

Re: Дата и время

Добавлено: 30 июл 2012, 12:38
Fedya
Да, спасибо.

Вот тут я пытался добавить минуты, секунды,
с минутами вроде получилось, а вот секунды не уверен :D

Код: Выделить всё

$days = floor($currenttime / 86400);$hours = floor(($currenttime - $days * 86400) / 3600);$min = floor(($currenttime - $days * 86400 - $hours * 3600)/60);$sec = floor(($currenttime - $days * 86400 - $hours * 3600 - $min*60)/60);
Правильно?



_____
Не надо в конце делить на 60, все, всем спасибо!