PHP проверяет, если 3 отсчета позже (дата) (цикл 1-7)

#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
}