Как проверить диапазон дат путем сравнения тех, кто использует php?
Я хочу показать ошибки проверки
- если дата выезда старше, чем дата заезда
- если дата заезда равна сегодняшнему завтра или послезавтра, добавьте сообщение об ошибке.
- если даты заезда и выезда совпадают.
- если дата выезда, по крайней мере, не новее, чем день регистрации заезда.
для этих целей я создал несколько переменных.
$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] }
Таким образом, код выполняется после выполнения первого условия. Конечно, в этом случае это не имеет большого значения, но лучше изучить эффективный код с самого начала и использовать его везде.