PHP의 일광 절약 시간을 무시하고 두 날짜를 빼는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/804571

  •  03-07-2019
  •  | 
  •  

문제

이틀 사이의 일 수를 계산하려고 노력하고 있지만 일광 절약 시간이있는 문제가 발생합니다. 내 코드는 다음과 같습니다.

function date_diff($old_date, $new_date) {
    $offset = strtotime($new_date) - strtotime($old_date);
    return $offset/60/60/24;
}

날이 모두 같은 DST 기간 내에있는 한 잘 작동합니다.

echo date_diff('3/15/09', '3/18/09'); // 3

그러나 그들이 더 이상 떨어져 있다면 :

echo date_diff('11/15/08', '3/18/09'); // 122.95833333333

나는 균일 한 며칠을 원하고 DST에 신경 쓰지 않습니다. 나는 결과를 반올림 할 수 있다고 생각하지만 그것은 Kludgy를 느낍니다. 더 나은 (쉬운) 방법이 있습니까? 나는 그것을 피할 수 있다면 하루 종일 준비된 계산을 피할 필요가 없다.

(참고 : PHP 5.1.6에 따라 실행되어야하므로 5.3의 날짜 기능 중 일부는 사용할 수 없습니다.)

조금 더 많은 정보 : 나는 오프셋을 가져 와서 DB에있는 다른 dateTimes에 추가 할 것입니다. 그리고 시간 부분이 아닌 하루 만 변경하기를 원합니다. 어쨌든 반올림은 작동하지 않습니다. 추가 할 때 다른 방향으로 1 시간 씩 꺼집니다. 아마도 전체 문제에 대한 더 나은 접근이있을 것입니다 ....

도움이 되었습니까?

해결책

당신은 사용할 수 있습니다 http://ca3.php.net/date_default_timezone_set 시간대를 GMT로 설정하려면 오프셋이 없습니다.

또는 date('I',$timetamp)

if ( date("I") == 1 ) {      // "WE ARE MDT";  
        $timeZone = "MDT";  
} else {  
        $timeZone = "MST";  
}  

다른 팁

일광 절약 시간없이 날짜가 시간대에 살도록 강제 GMT/UTC :

function date_diff($old_date, $new_date) {
  $offset = strtotime($new_date . " UTC") - strtotime($old_date . " UTC");
  return $offset/60/60/24;
}

echo date_diff('3/15/09', '3/18/09'); // 3
echo date_diff('11/15/08', '3/18/09'); // 123

사용하여 특정 방향으로 반올림을 강제 할 수 있습니다. floor() 또는 ceil().

위의 'UTC'코드를 시도했습니다. 나를 위해 일하지 않았다. 나는 소수점 값을 얻었습니다.

날짜 범위 내에 일광 절약 날짜가있는 경우 차이 직렬 소수 부분은 .5 이상입니다. 날짜 범위가 3/15에 일광 절약을하는 경우, 소수점 값은> .5 일광 날짜가 꺼질 때 소수점 <.5입니다. 그래서 나는 단지 차이 직렬을 라운드 () 함수에 넣고 일수에 필요한 정수를 얻습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top