Проверьте дату между двумя датами

Я должен проверить, находится ли входящая дата между 3 и 6 месяцами до сегодняшнего дня. Если он находится за пределами этого диапазона, он должен выполнить определенный код.

ниже код

<?php

$date1 = '22-10-2017';
$date2 = date('d-m-Y' , strtotime('-3 months'));
$date3 = date('d-m-Y' , strtotime('-6 months'));
if((strtotime($date1) < strtotime($date2)) || (strtotime($date1) > strtotime($date3))){
    echo "Inside Range";
}else echo "Out of Range";

?>

Например, если

  1. Дата поступления 20-02-2018 - вне допустимого диапазона.
  2. Дата поступления 20-10-2017 - Inside Range.
  3. Дата поступления 20-08-2017 - вне допустимого диапазона.

person hemanth kumar    schedule 22.02.2018    source источник
comment
Вы хотите проверить, превышает ли входящая дата более 3 месяцев с сегодняшнего дня, но у вас нет переменной, которая возвращает сегодняшнюю дату   -  person    schedule 22.02.2018
comment
@ Тарасович Зачем это нужно?   -  person Mike    schedule 22.02.2018
comment
Код в вопросе работает? Почему бы и нет? Что случилось? Есть ошибки?   -  person Mike    schedule 22.02.2018
comment
@mike: Нет, это всегда выходит за пределы диапазона,   -  person hemanth kumar    schedule 22.02.2018
comment
@Mike Я думаю, если вы хотите сравнить одну переменную с другой, вам нужно инициализировать обе, не так ли?   -  person    schedule 22.02.2018
comment
@Tarasovych: об этом позаботится функция даты. дата('д-м-г');   -  person hemanth kumar    schedule 22.02.2018
comment
@Tarasovych Ты не сравниваешь с сегодняшней датой. Вы сравниваете с 3 месяца и 6 месяцев назад.   -  person Mike    schedule 22.02.2018


Ответы (2)


Вы проверяете с помощью ||, в вашем случае вам нужно использовать &&, потому что вам нужна дата МЕЖДУ

$date1 = '20-08-2017';
$date2 = date('d-m-Y' , strtotime('-3 months'));
$date3 = date('d-m-Y' , strtotime('-6 months'));
if((strtotime($date1) <= strtotime($date2)) && (strtotime($date1) >= strtotime($date3))){
    echo "Inside Range";
}else { 
   echo "Out of Range";
}

Объяснение: нужно изменить ваше состояние с if((strtotime($date1) < strtotime($date2)) || (strtotime($date1) > strtotime($date3))) на if((strtotime($date1) <= strtotime($date2)) && (strtotime($date1) >= strtotime($date3))){

Это также значительно проще, если вы используете объекты DateTime:

$date1 = new DateTime('20-08-2017');
$date2 = new DateTime('-3 months');
$date3 = new DateTime('-6 months');

if($date1 < $date2 && $date1 > $date3) {
    echo "Inside Range";
} else {
    echo "Out of Range";
}
person Krish    schedule 22.02.2018
comment
лучше всего поместить это else в фигурные скобки. Я знаю, что ОП этого не сделал, но они должны и должны быть исправлены. - person Funk Forty Niner; 22.02.2018
comment
Это также значительно проще, если вы используете объекты DateTime. Не возражаете, если я украду ваш ответ, чтобы добавить это? - person Mike; 22.02.2018
comment
Пожалуйста, @Mike, я только что попытался решить проблему Хеманта с помощью его собственного кода ... но всегда приветствуется лучший подход. - person Krish; 22.02.2018
comment
Добавление к нему было бы хорошо; только надеюсь, что ответ не будет перезаписан. - person Funk Forty Niner; 22.02.2018
comment
@FunkFortyNiner Я бы не стал этого делать... :) - person Mike; 22.02.2018
comment
Я не думал, что ты @Mike - вот почему я не пинговал тебя в этом комментарии. Я собирался, но потом сказал (Нет...), он знает, что делает ;-) - person Funk Forty Niner; 22.02.2018
comment
Спасибо @Майк. Это очень помогло. - person hemanth kumar; 22.02.2018
comment
@FunkFortyNiner Я работал над своим собственным ответом, когда был опубликован этот, который был в основном таким же, как и с использованием DateTime, что на самом деле не требовало публикации другого ответа, поэтому я подумал, зачем позволять этим качественным 7 строкам кода просто пропадать? - person Mike; 22.02.2018
comment
Эй, @Mike, надеюсь, у тебя все еще все в порядке. Как-нибудь/день я получу от тебя эту (очевидно, потрясающую) чашку кофе ;-) ура (Криш: извините, что я тут немного ворчу). ... и поскольку я печатал это, пока вы тоже, ...... Я тоже собирался сказать это, спрашивая, почему вы не публикуете свой собственный ответ .... да ладно .. пару минут назад ты что-то получил ;-) Ну и... интересно, что да? - person Funk Forty Niner; 22.02.2018
comment
@FunkFortyNiner Да, это был stackoverflow .com/questions/48776512/почему-это-результат-в-php/. Странно, как такие глупые ответы иногда получают так много голосов... - person Mike; 22.02.2018
comment
@Майк, эй, каждая мелочь помогает! в итоге все довольны ;-) - person Funk Forty Niner; 22.02.2018

Вы можете сделать так:

$today=date_create(date("Y-m-d"));
$date=date_create("2018-06-12");
$diff=date_diff($today,$date)->format("%a");

if ($diff > 90 && $diff < 180) {
    echo "Inside range";
}
else {
    echo "Out of range";
}
person Community    schedule 22.02.2018
comment
У вас неправильные имена переменных в вашей функции date_diff, и вы также не можете преобразовать DateInterval в Int. Вам нужно format() это. См. php.net/manual/en/datetime.diff.php. - person Mike; 22.02.2018