PHP의 일광 절약 시간을 무시하고 두 날짜를 빼는 방법은 무엇입니까?
문제
이틀 사이의 일 수를 계산하려고 노력하고 있지만 일광 절약 시간이있는 문제가 발생합니다. 내 코드는 다음과 같습니다.
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
위의 'UTC'코드를 시도했습니다. 나를 위해 일하지 않았다. 나는 소수점 값을 얻었습니다.
날짜 범위 내에 일광 절약 날짜가있는 경우 차이 직렬 소수 부분은 .5 이상입니다. 날짜 범위가 3/15에 일광 절약을하는 경우, 소수점 값은> .5 일광 날짜가 꺼질 때 소수점 <.5입니다. 그래서 나는 단지 차이 직렬을 라운드 () 함수에 넣고 일수에 필요한 정수를 얻습니다.