2013-09-02 3 views
1

strtotime 함수가 다른 결과를 반환하는 이상한 문제가 발생했습니다 (잘못된 결과라고 생각합니다).strtotime은 다른 PHP 버전에서 다른 결과를 반환합니다.

이 내 테스트 코드와 결과입니다 :

$fromTime = strtotime('2013-10-22'); 
$toTime = strtotime('2013-10-28'); 
$days = ($toTime - $fromTime)/(3600 * 24); 

var_dump($days, $fromTime, $toTime); 

// PHP 5.2.5 on codepad.org - correct 
// int(6) 
// int(1382400000) 
// int(1382918400) 

// PHP 5.3.15, PHP 5.4.6 - incorrect I guess 
// float(6.0416666666667) 
// int(1382392800) 
// int(1382914800) 

당신은 그것을 http://codepad.org/gdTqFLqG에 살고 볼 수 있습니다.
왜 이런 일이 발생했는지 알고 있습니까?

+2

PHP의 'DateTime' 클래스를 사용하여 같은 문제를 복제하려고 시도 했습니까? –

+0

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ™? – Spudley

+0

나는'strtotime' 대신'DateTime'을 이미 사용하고 있습니다. Format 'Y'는 예상대로 작동하지만 왜 이런 일이 발생했는지 궁금했습니다. – martin

답변

3

대신 DateTime 클래스를 사용하는 @ N.B.의 제안에 동의합니다. - 오늘이 종류의 것에 strtotime()을 사용해서는 안됩니다.

그러나 왜 그런 일이 벌어지고 있는지 비교할 날짜를 살펴보세요. 그 날짜 사이에 자주 일어나는 일은 무엇입니까? 네, 그게 바로 일광 절약입니다.

내 생각에 PHP 버전과 관련이 없으며 테스트중인 다른 플랫폼의 시간대 설정과 관련이 있습니다. 하나는 UCT를 사용하도록 설정되고 다른 하나는 DST가있는 로컬 시간대를 사용하도록 설정됩니다.

+0

DateTime 클래스에서 괜찮습니다. 왜 strtotime이 올바른 값을 반환하지 않는지 궁금했습니다. 그것이 특정 날짜에만이 오류를 만들기 때문에 그것은 시간대 문제가 아니라고 확신합니다. – martin

+1

@Martin :'strtotime()'호출에 의해 주어진 타임 스탬프는 주어진 날짜에 자정 자정입니다. DST 시간대가있는 서버에서 자정은 1 년 반 동안 오프셋됩니다. 두 날짜가 DST 시계의 다른면에있는 경우 이는 "X 일 및 1 시간"* 또는 "X-1 일 및 23 시간"중 하나를 제공합니다. float로 표시되는 값은 * 6.041666 * 또는 * 5.958333 *입니다. 따라서 서버가 모든 내부 처리에 대한 기본 표준 시간대로 UCT를 사용하여 입/출력에 대해서만 현지 시간으로 /에서 변환하는 것이 좋습니다. – Spudley

0

두 번째 테스트에서 일부 UTC + 수정으로 올바른 시간을 얻으므로 date_default_timezone_set()을 사용해야합니다.

관련 문제