source

두 PHP datetime 개체가 동일한 날짜로 설정되었는지 확인합니다(시간 무시).

ittop 2023. 8. 26. 00:01
반응형

두 PHP datetime 개체가 동일한 날짜로 설정되었는지 확인합니다(시간 무시).

2개의 datetime 객체를 비교하여 동일한 날짜로 설정되었는지 확인하고 싶지만 객체의 시간 구성 요소는 상관 없습니다.현재 date_format 명령어를 사용하여 'Y-m-d'와 같은 문자열을 추출하여 비교하고 있지만, 이는 어색해 보입니다.

$firstDate = date_format($firstDateTimeObj, 'Y-m-d');
$secondDate = date_format($secondDateTimeObj, 'Y-m-d');

if !($firstDate == $secondDate) {

// some code
}

저는 프로그래밍과 PHP에 익숙하지 않아서 어떤 포인터든 감사합니다.

개체 구문을 사용합니다!

$firstDate = $firstDateTimeObj->format('Y-m-d');
$secondDate = $secondDateTimeObj->format('Y-m-d');

if 식과 매우 가까웠지만 ! 연산자가 괄호 안에 있어야 합니다.

if (!($firstDate == $secondDate))

이는 다음과 같이 표현할 수도 있습니다.

if ($firstDate != $secondDate)

첫 번째 답변이 완전히 틀려서 새로 시작합니다.

다른 답변에서 볼 수 있듯이 가장 간단한 방법은 다음과 같습니다.date_format이것이 거의 확실하게 가야 할 길입니다.그러나 DateTime 클래스의 전체 파워를 활용하는 다른 방법이 있습니다. 사용diff를 생성하기 위해DateInterval인스턴스를 확인합니다.d속성: 만약 그렇다면0같은 날입니다.

// procedural
$diff = date_diff($firstDateTimeObj, $secondDateTimeObj);

// object-oriented
$diff = $firstDateTimeObj->diff($secondDateTimeObj);

if ($diff->format('%a') === '0') {
    // do stuff
} else {
    // do other stuff
}

이 경우에는 거의 확실하게 오버킬이지만 나중에 더 복잡한 작업을 수행하려면 유용한 기술이 될 수 있습니다.

동일한 문제가 있는 답을 검색하는 중입니다.저는 다른 방법을 사용하는 것보다 저에게 더 나은 솔루션에 도달했습니다.

주요 문제는 DateTime 개체의 시간 부분을 무시하는 것입니다. 시간으로 설정하십시오(예: 12:00:00).

$firstDateTimeObj->setTime(12, 0, 0);
$secondDateTimeObj->setTime(12, 0, 0);

// The main problem was checking if different.. but you can use any comparison
if ($firstDateTimeObj != $secondDateTimeObj) {
}

저는 당신의 접근 방식이 좋다고 생각하지만, 저는 그것을 제거할 것입니다.-그들이 아무것도 추가하지 않기 때문에.

$firstDate = date_format($firstDateTimeObj, 'Ymd');
$secondDate = date_format($secondDateTimeObj, 'Ymd');

if ($firstDate != $secondDate) {
    // some code
}

이것은 저에게 아주 효과적이었습니다.

$date1=DateTime::createFromFormat('Y-m-d H:i:s', '2014-07-31 07:30:00')->format('Y-m-d');
$date2=DateTime::createFromFormat('Y-m-d H:i:s', '2014-08-01 17:30:00')->format('Y-m-d');
if($date1==$date2){
    echo "==";
}else{
    echo "!=";
}

여기서 같은 질문을 찾다가 다른 방법을 생각해냈습니다.상당히 간결하게:

$diff = date_diff($date1,$date2);
if ($diff->days == '0') {
  /* it's the same date */
}

먼저 date_diff를 사용하여 date_interval 개체를 가져옵니다.date_interval 개체에는 두 날짜 사이의 총 일 수를 가져오는 데 사용할 수 있는 'days' 속성이 있습니다.

저는 오늘 등록 날짜와 비교하고 회원이 된 지 얼마나 되었는지에 따라 특정 시간 간격으로 이메일을 보내는 데 사용하고 있습니다.

strtime 텍스트 날짜를 유닉스 타임스탬프로 변환합니다. http://fr.php.net/manual/en/function.strtotime.php

$first = strtotime(date_format($firstDateTimeObj, 'Y-m-d'));
$second = strtotime(date_format($secondDateTimeObj, 'Y-m-d'));

if ($first != $second) {

// some code
}

그리고 다음과 같습니다.

if ($first > $second) {
// some code
}

if ($first < $second) {
// some code
}
$first = strtotime(date_format($firstDateTimeObj, 'Y-m-d'));
$second = strtotime(date_format($secondDateTimeObj, 'Y-m-d'));

if ($first != $second) {
    // some code
}

빠르고 더럽고, 원하는 날짜만큼 재사용 가능하며, 여전히 조정이 필요할 수 있습니다.

업데이트: 덜 더럽습니다.

if(sameDate($firstDateTimeObj, $secondDateTimeObj, $ThirdDateTimeObj))
{
   // your code

}

function sameDate (DateTime ...$dates) {

   foreach($dates as $date)
   {
      $test[] = $date->format('Ymd');
   }

   $result = array_unique($test);

   if(count($result) == 1)
   {
      return true;
   {

   return false;

}

이니셜라이즈 aDateTime를 하고 을 " 하고시설정니합다을간반대다니설합"로 합니다.00:00:00그런 다음 시간을 무시한 날짜 간 비교를 사용할 수 있습니다.

$today = \DateTime::createFromFormat('d/m/Y H:i:s', '21/08/2014 00:00:00');
$tomorrow = \DateTime::createFromFormat('d/m/Y H:i:s', '22/08/2014 00:00:00');

// now you can compare them just with dates
var_dump($today < $tomorrow); //true
var_dump($today === $tomorrow); //false
var_dump($today !== $tomorrow); //true

@에버트의 대답은 잘 작동하지만, 그것을 변형시키는 것은 정말 잘못된 것처럼 보입니다.DateTime개체를 문자열로 만든 다음 비교합니다.

언급URL : https://stackoverflow.com/questions/8328416/check-if-two-php-datetime-objects-are-set-to-the-same-date-ignoring-time

반응형