PHP 5.2.8에서 두 개의 Date Time 개체를 비교하려면 어떻게 해야 합니까?
PHP 문서를 보면 다음 두 가지 방법이 있습니다.DateTime
오브젝트는 둘 다 문제를 해결할 수 있을 것 같습니다.
- Date Time : ::diff : 차이점을 취득하고 그것을 사용하여 오래된 것을 판별합니다.
- DateTime ::getTimestamp : UNIX timesampt 를 가져와 비교합니다.
두 방법 모두 버전 > = 5.3에서 사용할 수 있는 것으로 doco에 표시되어 있습니다(놀랍지 않게도 호출하려고 하면 존재하지 않습니다).5.2.8에 대한 구체적인 문서를 찾을 수 없기 때문에 내 버전에 동등한 방법이 있는지 잘 모르겠습니다.문제를 검색하여 다양한 솔루션을 찾았는데, 그 중 어느 것도 저의 간단한 요구 사항에 부합하지 않습니다.
- 두 Date Time 개체를 비교하려면 어떻게 해야 합니까?
- 이전 PHP 버전의 doco는 어디서 찾을 수 있나요?구체적으로 버전 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)
이 남자에 대한 비교 연산자는 없는 것 같아요
편집
분명히 내 추측은 완전히 틀렸다(밀렌이 이것을 그렇게 효과적으로 설명해줘서 고맙다).비교 연산자가 있고, 덕분에 잘 작동합니다.때때로 나는 컴파일러가 정말 그립다.이 버그는 위의 코드에 있습니다.저보다 훨씬 더 빨리 찾을 수 있을 거예요:)
다음은 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:~#
$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");
var_dump($date1 == $date2); // false
var_dump($date1 < $date2); // true
var_dump($date1 > $date2); // false
PHP 5.2.2 이전 버전(실제로 모든 버전에 대해)의 경우 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
에폭초도 비교할 수 있습니다.
$d1->format('U') < $d2->format('U')
출처 : http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (Date Time 관련 기사 참조)
시간이 아닌 날짜를 비교하려면 다음을 사용할 수 있습니다.
$d1->format("Y-m-d") == $d2->format("Y-m-d")
$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';
}
PHP 7.x 에서는 다음을 사용할 수 있습니다.
$aDate = new \DateTime('@'.(time()));
$bDate = new \DateTime('@'.(time() - 3600));
$aDate <=> $bDate; // => 1, `$aDate` is newer than `$bDate`
말씀하신 대로DateTime::diff
두 날짜를 비교하기 위해 부울 값보다 더 정확한 값을 얻을 수 있습니다.
예를 들어, 일수:
$date1 = new DateTime('2021-07-09');
$date2 = new DateTime('2020-10-21');
echo $date1->diff($date2)->format('%R%a days');
하지만 다음 에일리어스를 사용할 수도 있습니다.DateTime::diff
어느 것이date_diff
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
$date1 = new DateTime('2021-07-09');
$date2 = new DateTime('2020-10-21');
echo date_diff($date1, $date2)->format('%R%a days');
이게 도움이 될 거야
$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";
}
언급URL : https://stackoverflow.com/questions/961074/how-do-i-compare-two-datetime-objects-in-php-5-2-8
'source' 카테고리의 다른 글
어레이 요소를 한 어레이 위치에서 다른 어레이 위치로 이동합니다. (0) | 2022.09.14 |
---|---|
WHERE 절의 조건 순서가 MySQL 성능에 영향을 미칩니까? (0) | 2022.09.14 |
Vuex getter가 업데이트되지 않음 (0) | 2022.09.14 |
스프링 크론 vs 일반 크론? (0) | 2022.09.14 |
Flask, SQL Chemy 및 MySQL Server가 없어졌습니다. (0) | 2022.09.14 |