2014-04-02 3 views
2

strtotime으로 일부 예기치 않은 동작이 갖는PHP strtotime +2.5 시간 버그?

$d = '2.5';         // i.e. hours 
$t = '2014-03-20 08:30:00';     // mysql datetime 
$ut = strtotime($t);       // value: 1395297000 
$s = $d * 60 * 60;       // duration in seconds: 9000 
$plusHrs = strtotime($t.' +'.$d.' hours'); // value: 1395315000 
$plusSec = strtotime($t.' +'.$s.' seconds'); // value: 1395306000 

예상 행동을하는 것은 $ 그 plusHrs = $ plusSec이 될 것입니다. 이것은 입력 된 날짜와 상관없이 발생하므로 일광 절약 시간 문제가 아닙니다.

이것은 버그입니까? (PHP v5.3.14)

답변

4

아니요, 이것은 버그가 아닙니다. strtotime()relative 형식의 정수 값을 필요로합니다. 따라서 +2.5 시간은 "+2 GMT"으로 처리 된 다음"+5" 시간으로 처리되며 점은 무시됩니다. 쉼표로 변경하거나 심지어 삭제할 수 있습니다. 결과는 변경되지 않습니다. 정수가 다시 구문 분석되기 때문입니다. 따라서, 이러한 문이 GMT의 대한 상대적인 시간 추가로 처리됩니다 오프셋 :

//this is the same things: 
//and they mean set timesone to GMT+2 & add 5 hours: 
date('Y-m-d H:i:s', strtotime('now +2.5 hours')); 
date('Y-m-d H:i:s', strtotime('now +2,5 hours')); 
date('Y-m-d H:i:s', strtotime('now +2 5 hours')); 

따라서, 예를 들어, +1.5 hoursadd 5 hours for time in GMT +1을 할 것입니다. 즉, 최종 결과 은 현재 시간대의에 따라 달라집니다. 초기 타임 스탬프가 현재 시간대 (위의 샘플에서는 now)로 설정되기 때문입니다.

+0

2.5이 함께 시도 할 수 있습니다 당신은 내가 무슨 뜻인지 확인할 수 있습니다. 처음 세 문장은 7 시간이 아닌 5 시간을 추가합니다. – geoidesic

+0

글쎄, 그건 테스트, 그것은 나를 위해 동일한 4 행을주고있어. PHP 버전이 무엇인지 확인해 보겠습니다. –

+0

@geoidesic 요점이 추가되었습니다. '+7 시간'이 아닙니다. (모든 시간대가 아닙니다.) 조금 복잡해. –

0
$plusHrs = strtotime($t.' +'.$d.' hours');  
$plusSec = strtotime($t.' +'.$s.' seconds'); 

These two are different, $s = $d * 60 * 60 while $d = '2.5. 
+0

"다름"이란 무엇을 의미합니까? 기본적으로 2.5 * 60 * 60 초는 2.5 시간과 동일합니다 –

+0

.5를 0.5 분으로 말하면 다른 것입니다. – kimbarcelona

0

당신은 그 라인의 각 주위에 var_dumps을 넣어 ... 그건 전적으로 사실이 아니에요 잘 시간

$plusHrs = strtotime($t.' + 2 hours 30 minutes');