Дата и время

Программирование, которое не связано с API.
Fedya
Сообщения: 174
Зарегистрирован: 21 июл 2012, 19:56

Дата и время

Сообщение Fedya »

Здравствуйте!
У меня пишет дату последнего посещения в виде

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

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

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

Последний раз был здесь 1 день и 10 часов назад
а если день не прошел, то столько-то часов назад
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

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

Сообщение 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 "Прошло менее часа";
Fedya
Сообщения: 174
Зарегистрирован: 21 июл 2012, 19:56

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

Сообщение 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'];
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

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

Сообщение Alazaur »

ну да как-то так.
time() возвращает TIMESTAMP (время в секундах прошедшее с 1 января 1970 года до настоящего времени).
То есть констукции:

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

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

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

$cdate = date("Y-m-d G:i:s", time());
аналогичны
Fedya
Сообщения: 174
Зарегистрирован: 21 июл 2012, 19:56

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

Сообщение Fedya »

Не понял еще одно,
вот тут

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

$oldtime = 1343631396; // TIMESTAMP последнего посещения
как записать время последнего посещения в секундах
Fedya
Сообщения: 174
Зарегистрирован: 21 июл 2012, 19:56

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

Сообщение Fedya »

Получается тут мы отнимаем от меньшего большое, нет?

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

$currenttime = time() - $oldtime;
gpv123
Сообщения: 346
Зарегистрирован: 29 янв 2012, 20:57

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

Сообщение gpv123 »

Fedya
Сообщения: 174
Зарегистрирован: 21 июл 2012, 19:56

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

Сообщение Fedya »

аа, я забываю, что это не сам 1970 год :D
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

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

Сообщение 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
Fedya
Сообщения: 174
Зарегистрирован: 21 июл 2012, 19:56

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

Сообщение 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, все, всем спасибо!
Ответить