#php #math #base
#php #математика #основание
Вопрос:
В настоящее время я создаю систему, которая должна знать, была ли сохранена определенная переменная менее 3 дней назад, и если да, верните true . Когда переменная была первоначально сохранена, она была установлена как дата (‘N’), то есть день недели, в числовом формате. (1 = понедельник, 7 = воскресенье в соответствии с документами php.)
Однако, как мне выяснить, что прошло 3 или более дней спустя? Моя главная дилемма заключается в следующем: если переменная равна 5 дню, а в настоящее время 4-й день, это означает, что цикл в 1 неделю почти завершен (прошло 6 дней) — однако я не могу понять, как это сделать в php. Другим примером может быть переменная 7-го дня, и в настоящее время это 1-й день — численно говоря, включительно между двумя значениями есть 6 «дней», но на самом деле прошел только один день, так как после 7 наступает 1.
PS Я сбрасываю значения каждую неделю, поэтому я не утруждаю себя сохранением таких вещей, как месяц или год.
Комментарии:
1. Разве вы не можете просто перевести его в datetime, а затем сравнить их два? Что-то вроде
new DateTime(date('Y') . "-" . date('m') . "-" . $yourdate . " 00:00:00");
then просто различает их?2. Или используйте временные метки unix. если разница больше 3 (дней) * 24 (часов / суток) * 3600 (секунд / час), то… Это значительно упрощает математику (все целые числа).
3. Это очень простая математика. Можете ли вы хотя бы показать, что вы пробовали до сих пор?
Ответ №1:
Это действительно можно решить в текущем состоянии с помощью математики. Давайте сначала посмотрим на хорошие и плохие значения.
- сохранено
1
: хорошо: 2, 3, 4 плохо: 1, 5, 6, 7 - сохранено
2
: хорошо: 3, 4, 5 плохо: 1, 2, 6, 7 - сохранено
6
: хорошо: 7, 1, 2 плохо: 3, 4, 5, 6 - сохранено
7
: хорошо: 1, 2, 3 плохо: 4, 5, 6, 7
Если вы вычтете сохраненное значение из текущего, вы увидите, что good - stored = 1, 2 or 3
для стандартных случаев (без перекрытия) и good - stored = -6, -5, -4
(максимальное перекрытие).
Между bad - stored = 4, 5, 6 or 0
тем (без перекрытия) и bad - stored = -3, -2, -1 or 0
(максимальное перекрытие).
Итак, вы хотите, чтобы ваш результат был либо в интервале [1, 3], либо [-6, -4], что можно было бы сделать следующим образом
//somwhere $storedN is defined
$todayN = date('N');
$result = $todayN - $storedN;
if (($result > 0 amp;amp; $result < 4) || ($result > -7 amp;amp; $result < -3)) {
// no overlap overlap
// valid
}
Ответ №2:
Предполагая, что вы сохраняете свои даты в виде строк, одним из подходов является использование времени эпохи:
echo time(); //1403218504
Большое число, которое вы видите, — это количество секунд с 1 января 1970 года.
В день 3600 * 24 секунды. Поэтому, когда вы сохраняете дату своей «переменной» в эпоху времени, чтобы узнать, было ли это более 3 дней назад, вы можете сделать
$one_day = 3600*24;
$now = time();
$before = $your_old_time;
if ($now - $before > ($one_day * 3)) {
//$before is older than 3 days
}