Как проверить диапазон дат путем сравнения тех, кто использует php?

Я хочу показать ошибки проверки

  1. если дата выезда старше, чем дата заезда
  2. если дата заезда равна сегодняшнему завтра или послезавтра, добавьте сообщение об ошибке.
  3. если даты заезда и выезда совпадают.
  4. если дата выезда, по крайней мере, не новее, чем день регистрации заезда.

для этих целей я создал несколько переменных.

$checkin_booking_period = $_POST["checkin_booking_period"];
    $checkout_booking_period = $_POST["checkout_booking_period"];
        $today = date("m.d.y");
        $dateTimestamp1 = strtotime($checkin_booking_period);
        $dateTimestamp2 = strtotime($checkout_booking_period);
        $tomorrow = mktime(0, 0, 0, date("m"), date("d")+1, date("y"));
        $day_after_tomorrow = mktime(0, 0, 0, date("m"), date("d")+2, date("y"));

и мои условия заявления:

//check out date must be newer than check in date.
        if ($dateTimestamp1 > $dateTimestamp2) {
            //Blank string, add error to $errors array.        
            $errors['checkout_booking_period'] = "check out date must be newer than check in date!";
        }               
        if (($dateTimestamp1 = $tomorrow) || ($dateTimestamp1 = $day_after_tomorrow) || ($dateTimestamp1 = $today)) {
            // if checkin date is equal to today tomorrow or day after tomorrow add error message
            $errors['checkout_booking_period'] = "You have to reserve the place at least two days before the check in!";    
        }
        if ($dateTimestamp1 = $dateTimestamp2) {            
            $errors['checkout_booking_period'] = "check in date and check out date can not be same!";
        }

но эти условные обозначения не полностью соответствуют требованию. Например: если регистрация прошла, а дата выезда указана: "Дата заезда и дата выезда не могут быть одинаковыми!" Как создать условные операторы для полного выполнения требований, о которых я упоминал выше?

1 ответ

Решение

Я вижу две проблемы в вашем коде:

1: вы используете как строковые даты, так и временные метки и сравниваете их в своих условных выражениях. Результат date("m.d.y") может быть '09.07.14', строка, которую вы называете $todayи вы сравниваете это с отметкой времени, полученной из strtotime(), как 2726372362. Это вызывает странный результат. Вы должны использовать только временные метки в сравнении.

2: Вы всегда можете установить только одно значение $errors['checkout_booking_period'], но это не отражено в ваших условных заявлениях. Теоретически было бы возможно выполнить более одного условия. Но вы не можете хранить это в $errors переменная. В этом случае вы можете написать код, который выполняется более эффективно:

if ([condition1]) { [do something] }
elseif ([condition2]) { [do somthing else] }
elseif ([condition3]) { [do somthing else] } 
elseif ([condition4]) { [do somthing else] } 

Таким образом, код выполняется после выполнения первого условия. Конечно, в этом случае это не имеет большого значения, но лучше изучить эффективный код с самого начала и использовать его везде.

Другие вопросы по тегам