За последние 2 дня

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Запутался, ну..
Нужно сделать, чтобы "что-то" в базе проверялось за последние 2 дня.
Последние 2 дня - это что?
- Всё сегодня с 00:00:00 до текущего времени и всё вчера с 00:00:00 до 23:59:59
- Всё вчера с 00:00:00 до 23:59:59, всё позавчера с 00:00:00 до 23:59:59
- Всё сегодня с 00:00:00 до текущего времени, всё вчера с 00:00:00 до 23:59:59, всё позавчера с 00:00:00 до 23:59:59

?
 

czp

czp
Регистрация
05.06.2011
Сообщения
635
а почему нельзя просто сделать выборку по дате минус 2 дня?
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
czp сказал(а):
а почему нельзя просто сделать выборку по дате минус 2 дня?
Тогда это будет за последние 48 часов, а не за последние 2 дня.
Там будет выбор, типа:
- Удалить записи за последние 2 дня
- Удалить записи за последние 48 часов
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
Про unix timestamp слыхал?) но если честно я вопрос не понял, чуть язык не сломал пока читал.
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
[member=FiRеFоX], вам нужно решение или просто ответ на "что такое 'последние два дня'?".

Если ответ, тогда, наверное вариант №2:


FiRеFоX сказал(а):
- Всё вчера с 00:00:00 до 23:59:59, всё позавчера с 00:00:00 до 23:59:59
Иначе если решение, тогда, вам нужно найти сначала unix timestamp как упомянул [member=AngelGabriel], потом найти остаток дня (unix time % (modulo) 86400 (день)), найти сегодня 00:00:00 и позавчерашний 00:00:00 и сравнить таймстамп в таблице типа: позавчера 00:00:00 (unix timestamp) < x < сегодня 00:00:00 (unix timestampe), короче код с комментариями:
Код:
# Нахождение timestamp'a
SET @a = UNIX_TIMESTAMP();
# Остаток дня, т.е. сколько осталось в сегодняшнем дне секунд
SET @b = @a % 86400;
# Три дня назад 00:00:00
SET @c = @a - (@b + (86400 * 2));
# Сегодняшней 00:00:00
SET @d = @a - @b;
# пример, гдя tbl -> таблица, timestamp -> unix timestamp
SELECT * FROM tbl WHERE timestamp > @c AND timestamp < @d;
 

motek

злой как @
Регистрация
13.04.2010
Сообщения
730
FiRеFоX сказал(а):
- Удалить записи за последние 2 дня
- Удалить записи за последние 48 часов
если простуду лечить, то она проходит за 7 дней..., а если не лечить, то она проходит за неделю :)
 

motek

злой как @
Регистрация
13.04.2010
Сообщения
730
FiRеFоX сказал(а):
- Удалить записи за последние 2 дня
- Удалить записи за последние 48 часов
тогда объясните, чем эти два пункта отличаются?
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
motek сказал(а):
тогда объясните, чем эти два пункта отличаются?
За последние два дня:
Это текущий день с 00:00:00 минус 48 часов

За последние 48 часов:
Это текущая дата минус 48 часов
Ощутима разница?


Допустим, что сейчас время 19:00

Два дня назад - это:
Текущий день с 00:00:00 - 48 часов, итого дата получится: 12 ночи два дня назад, когда стартовали сутки.

48 часов назад - это:
19.00 (текущее время) - 48 часов назад, итого дата получится: 19.00 два дня назад.

Короче, чтобы было понятно на PHP:

Код:
$d = date('d', time());
$m = date('m', time());
$y = date('y', time());


// Время назад

$minus_day = 48 * 60 * 60;



// 2 дня назад

$time = mktime(0, 0, 0, $m, $d, $y) - $minus_day;

echo date('d-F-Y H:i:s', $time);



//48 часов назад:

$time = time() - $minus_day;

echo date('d-F-Y H:i:s', $time);
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
Volter9 +1, но бы не стал выносить эту логику в базу, конечно ИМХО.
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
[member=AngelGabriel], кто-то говорил что лучше делать все что возможно на SQL'е. Тогда вопрос что можно делать на SQL (точнее лучше, дешевле) а что нет?
 

motek

злой как @
Регистрация
13.04.2010
Сообщения
730
FiRеFоX сказал(а):
За последние два дня:
Это текущий день с 00:00:00 минус 48 часов
За последние 48 часов: Это текущая дата минус 48 часов
Ощутима разница?
скорее текущее время минус 48 часов... это понятно
но, если нужно удалить сообщения за последние два дня, то не думаю, что будет принципиально, удаляете Вы за последние 48 часов, или за 48 часов + количество часов с 00:00:00...на данном форуме реализовано отображение последних сообщений за 24 часа и не важно, в какое время запостил пользователь, отсчитывается 24 часа назад...
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
motek сказал(а):
скорее текущее время минус 48 часов... это понятно но, если нужно удалить сообщения за последние два дня, то не думаю, что будет принципиально, удаляете Вы за последние 48 часов, или за 48 часов + количество часов с 00:00:00...на данном форуме реализовано отображение последних сообщений за 24 часа и не важно, в какое время запостил пользователь, отсчитывается 24 часа назад...
Большой роли не сыграют эти часы.. Однако, предпочитаю точность)
 

czp

czp
Регистрация
05.06.2011
Сообщения
635
ну ок, удали по текущей дате и за вчера, у примеру
за 13,07,2014 и 12,07,2014 и будет тебе сегодня и вчера
 
Статус
Закрыто для дальнейших ответов.
Верх Низ