>

$start_date 가 있다면  그리고 $end_date , 사용자가 제공 한 날짜가 해당 범위 내에 있는지 어떻게 확인할 수 있습니까?

예 :

$start_date = '2009-06-17';
$end_date = '2009-09-05';
$date_from_user = '2009-08-28';

날짜가 문자열 인 순간, 타임 스탬프 정수로 변환하는 데 도움이 되겠습니까?


  • 답변 # 1

    타임 스탬프로 변환하는 것은 strtotime을 사용하여 올바르게 진행하는 방법입니다 (예 :

    $start_date = '2009-06-17';
    $end_date = '2009-09-05';
    $date_from_user = '2009-08-28';
    check_in_range($start_date, $end_date, $date_from_user);
    
    function check_in_range($start_date, $end_date, $date_from_user)
    {
      // Convert to timestamp
      $start_ts = strtotime($start_date);
      $end_ts = strtotime($end_date);
      $user_ts = strtotime($date_from_user);
      // Check that user date is between start & end
      return (($user_ts >= $start_ts) && ($user_ts <= $end_ts));
    }
    
    

  • 답변 # 2

    문자열이 'YYYY-MM-DD'표준 형식의 날짜로 확인되는 경우 비교를 위해 타임 스탬프로 변환 할 필요가 없습니다.

    이 테스트는 작동합니다 :

    ( ( $date_from_user >= $start_date ) && ( $date_from_user <= $end_date ) )
    
    

    제공 :

    $start_date     = '2009-06-17';
    $end_date       = '2009-09-05';
    $date_from_user = '2009-08-28';
    
    

    참고 : 이와 같은 문자열을 비교하면 "유효하지 않은"날짜가 허용됩니다 (예 : (12 월 32 일) '2009-13-32'및 이상한 형식의 문자열 '2009/3/3'의 경우 문자열 비교는 날짜 또는 타임 스탬프 비교와 동일하지 않습니다. 문자열의 날짜 값이일정한캐 나니 컬형식 인 경우에만 작동합니다.

    수정을 클릭하여 여기에 메모를 추가하고 명백한 내용을 자세히 설명하십시오.

    일관성으로 비교할 문자열은 동일한 형식이어야합니다. 월은 항상 2 자, 하루는 항상 2 자, 구분자 문자는 항상 대시가 되십시오. 4 문자 연도, 2 문자 월, 2 문자 일이 아닌 "문자열"을 안정적으로 비교할 수 없습니다. 예를 들어 문자열에 한 문자와 두 문자 개월이 혼합되어 있으면 '2009-9-30' 를 비교할 때 예기치 않은 결과가 발생합니다.   '2009-10-11' 로 . 우리는 인간적으로 "9"가 "10"보다 작은 것으로 보지만, 문자열 비교는 '2009-9' 를 볼 것입니다   '2009-1' 보다 큰 . 반드시 대시 구분 기호 문자가 필요하지는 않습니다. 우리는 'YYYYMMDD' 에서 문자열을 안정적으로 비교할 수 있습니다.  체재;구분 문자가있는 경우 항상 있어야하며 항상 동일해야합니다.

    CANONICAL으로, 문자열이 날짜 순서로 정렬되는 형식을 의미합니다. 즉, 문자열은 "year", "month", "day"로 표시됩니다. 우리는 'MM-DD-YYYY' 에서 문자열을 안정적으로 비교할 수 없습니다  형식이 아니기 때문에 형식이 아닙니다. 문자열 비교는 MM 를 비교합니다   YYYY 를 비교하기 전 (개월)  문자열 비교는 왼쪽에서 오른쪽으로 작동하기 때문에 (연도). 'YYYY-MM-DD'문자열 형식의 큰 장점은 정식이라는 것입니다. 이 형식으로 표시된 날짜는 문자열로 확실하게 비교할 수 있습니다.

    [ADDENDUM]

    php 타임 스탬프 변환을하려면 제한 사항에주의하십시오.

    일부 플랫폼에서 php는 1970-01-01 이전 및/또는 2038-01-19 이후의 타임 스탬프 값을 지원하지 않습니다. (이것이 유닉스 타임 스탬프 32 비트 정수의 본질입니다.) 이후 버전 pf php (5.3?)는 그 문제를 해결해야합니다.

    문자열에서 타임 스탬프로, 타임 스탬프에서 다시 문자열로 변환 할 때 동일한 시간대를 사용하지 않으면 시간대도 문제가 될 수 있습니다.

    HTH

  • 답변 # 3

    PHP 5.3 이상인 경우 DateTime 클래스를 사용하십시오. 사용하기 쉽고 기능이 향상되었습니다.

    DateTime은 내부적으로 시간대를 지원하며 다른 솔루션을 사용하면이를 처리 할 수 ​​있습니다.

    <?php    
    /**
     * @param DateTime $date Date that is to be checked if it falls between $startDate and $endDate
     * @param DateTime $startDate Date should be after this date to return true
     * @param DateTime $endDate Date should be before this date to return true
     * return bool
     */
    function isDateBetweenDates(DateTime $date, DateTime $startDate, DateTime $endDate) {
        return $date > $startDate && $date < $endDate;
    }
    $fromUser = new DateTime("2012-03-01");
    $startDate = new DateTime("2012-02-01 00:00:00");
    $endDate = new DateTime("2012-04-30 23:59:59");
    echo isDateBetweenDates($fromUser, $startDate, $endDate);
    
    

  • 답변 # 4

    $startDatedt = strtotime($start_date)
    $endDatedt = strtotime($end_date)
    $usrDatedt = strtotime($date_from_user)
    if( $usrDatedt >= $startDatedt && $usrDatedt <= $endDatedt)
    {
       //..falls within range
    }
    
    

  • 답변 # 5

    두 날짜를 타임 스탬프로 변환 한 다음 수행하십시오

    의사 코드 :

    if date_from_user > start_date && date_from_user < end_date
        return true
    
    

관련 자료

  • 이전 r - 함수의 출력으로 경고 및 오류를 어떻게 저장합니까?
  • 다음 Android Reverse geocoding - android - 역 지오 코딩 :getfromlocation