2014-09-07 3 views
0

나는 유효성 검사 오류 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 :

+0

데이터베이스에서이 날짜를 반환하는 경우 DB – mwafi

답변

1

나는이 코드에서 문제를 볼 당신은 문자열 날짜와 타임 스탬프를 모두 사용하고, 당신은 당신의 조건문 사람들을 비교하고 있습니다. date("m.d.y")의 결과는 $today이라고하는 문자열 인 '09 .07.14 '일 수 있으며이 값은(예 : 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] } 

코드가 첫 번째 조건이 충족 될 때 실행 수행이 방법. 물론이 경우에는별로 중요하지 않지만 처음부터 효율적인 코딩을 배우고 어디에서나 사용하는 것이 좋습니다.

+0

내에서이 작업을 수행 할 수 있습니다. 나는 내 코드를 이렇게 바꿨다. http://sandbox.onlinephpfunctions.com/code/1eca5b4ba5a6372f8438fbe5a6b587bc8956a27b 내 데이트 피커 포맷은 dd-mm-yy이고 여전히 이상한 결과를 얻고있다. 이 코드는 어디에 변경해야합니까? –

+0

포인트 1을 다시 읽은 다음 비교하기 전에 날짜와 타임 스탬프를 반향하십시오. 그러면 여전히 동일한 문제가 있음을 알 수 있습니다. 나는 http://sandbox.onlinephpfunctions.com을 좋아하지 않는다. 전에는 보지 못했다. –

관련 문제