PHP 5.2.8에서 DateTime 객체 두 개를 어떻게 비교합니까?
PHPPHP 5.2.8에서 DateTime 객체 두 개를 어떻게 비교합니까?
이것은 꽤 솔직해야 할 것처럼 보이지만, 잠시 동안이 문제를 저지른 막힌 페이지가 있습니다. 그래서 여기에갑니다.
PHP 문서를 살펴보면 DateTime 객체의 다음 두 가지 방법으로 내 문제를 해결할 수 있습니다.
이 두 가지 방법 모두 doco에서 버전> = 5.3에서 사용할 수있는 것으로 표시되어 있습니다 (그리고 내가 전화하지 않으려 고 시도하면 당연히 존재하지 않습니다). 5.2.8에 대한 특정 설명서를 찾을 수 없으므로 동일한 버전의 도구가 있는지 확실하지 않습니다. 나는 그 문제를 인터넷 검색으로 해결할 수있는 해결책을 찾았는데, 그 중 어느 것도 내 간단한 요구 사항에 답하지 못했습니다.
일부 컨텍스트의 경우 다음 코드가 있습니다.
$st_dt = new DateTime(verifyParam ('start_date'));
$end_dt = new DateTime(verifyParam ('end_date'));
// is the end date more ancient than the start date?
if ($end_dt < $start_dt)
분명히이 남자에 대한 비교 연산자가 없습니다.
편집 : 분명히 내 가정 완전히 거짓말 (너무 효과적으로 설명하기 위해 Milen 감사). 비교 연산자가 있으며 잘 작동합니다. 가끔 컴파일러가 그리워요. 위의 코드에있는 버그는 내가 찾은 것보다 훨씬 빨리 찾을 수있을 것이라고 확신합니다. :)
나는 당신의 솔루션의 단순함에 당황 스러울 것을 고대합니다.
편집 : 그리고 충분히, 당황은 계속된다 ...
해결법
-
==============================
1.다음은 DateTime 클래스에 대한 비교 연산자가 있음을 확인하는 것 같습니다.
다음은 DateTime 클래스에 대한 비교 연산자가 있음을 확인하는 것 같습니다.
dev:~# php <?php date_default_timezone_set('Europe/London'); $d1 = new DateTime('2008-08-03 14:52:10'); $d2 = new DateTime('2008-01-03 11:11:10'); var_dump($d1 == $d2); var_dump($d1 > $d2); var_dump($d1 < $d2); ?> bool(false) bool(true) bool(false) dev:~# php -v PHP 5.2.6-1+lenny3 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 26 2009 20:09:03) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies dev:~#
-
==============================
2.공식 문서에서 :
공식 문서에서 :
$date1 = new DateTime("now"); $date2 = new DateTime("tomorrow"); var_dump($date1 == $date2); // false var_dump($date1 < $date2); // true var_dump($date1 > $date2); // false
5.2.2 이전의 PHP 버전 (실제로는 모든 버전)에서 diff를 사용할 수 있습니다.
$datetime1 = new DateTime('2009-10-11'); // 11 October 2013 $datetime2 = new DateTime('2009-10-13'); // 13 October 2013 $interval = $datetime1->diff($datetime2); echo $interval->format('%R%a days'); // +2 days
-
==============================
3.또한 에포크 초를 비교할 수도 있습니다.
또한 에포크 초를 비교할 수도 있습니다.
$d1->format('U') < $d2->format('U')
출처 : http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (DateTime에 관한 아주 흥미로운 기사)
-
==============================
4.시간이 아닌 날짜를 비교하려면 다음을 사용할 수 있습니다.
시간이 아닌 날짜를 비교하려면 다음을 사용할 수 있습니다.
$d1->format("Y-m-d") == $d2->format("Y-m-d")
-
==============================
5.
$elapsed = '2592000'; // Time in the past $time_past = '2014-07-16 11:35:33'; $time_past = strtotime($time_past); // Add a month to that time $time_past = $time_past + $elapsed; // Time NOW $time_now = time(); // Check if its been a month since time past if($time_past > $time_now){ echo 'Hasnt been a month'; }else{ echo 'Been longer than a month'; }
-
==============================
6.이것은 당신을 도울 수 있습니다.
이것은 당신을 도울 수 있습니다.
$today = date("m-d-Y H:i:s"); $thisMonth =date("m"); $thisYear = date("y"); $expectedDate = ($thisMonth+1)."-08-$thisYear 23:58:00"; if (strtotime($expectedDate) > strtotime($today)) { echo "Expected date is greater then current date"; return ; } else { echo "Expected date is lesser then current date"; }
-
==============================
7.PHP 7.x부터 다음을 사용할 수 있습니다 :
PHP 7.x부터 다음을 사용할 수 있습니다 :
$aDate = new \DateTime('@'.(time())); $bDate = new \DateTime('@'.(time() - 3600)); $aDate <=> $bDate; // => 1, `$aDate` is newer than `$bDate`
from https://stackoverflow.com/questions/961074/how-do-i-compare-two-datetime-objects-in-php-5-2-8 by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
앰퍼샌드가있는 PHP 함수를 시작한다는 것은 무엇을 의미합니까? (0) | 2018.09.15 |
---|---|
PHP를 사용하여 큰 파일 스트리밍 (0) | 2018.09.15 |
PHP 스크립트에 대한 동시 요청 (0) | 2018.09.15 |
PHP 키워드 'var'는 무엇을합니까? (0) | 2018.09.15 |
PHP 클래스 란 무엇입니까? (0) | 2018.09.15 |