2016-10-01 2 views
2

PHP 5.6.14에 이렇게 :이것은 PHP 버그입니까?

$a = strtotime('2016-10-01'); 
$b = $a+29*24*3600; 
$c = $a+30*24*3600; 
die(date("d/m/Y",$b).' - '.date("d/m/Y",$c)); 

30/10/2016 - 30/10/2016 어떻게 이상한 내가 $c을 기대하기 때문에 31/10/2016 대신 30/10/2016로 돌아갑니다. PHP 버그입니까?

참고 : 날짜 작업을 수행하는 데 몇 가지 방법이 있지만 저는 이것에 대해 구체적으로 묻습니다. $a 월을 10보다 다른 숫자 (예 : 8,9,11,12)로 변경하면 예상 결과가 나타납니다.

+0

'var_dump ($ a, $ b, $ c)'를 항상 확인하십시오. b와 c는 특정 값을 가지고 있다고 가정하지만, 틀린 것으로 가정합니다. – goat

+1

이것은 또한 DateTime이 PHP에서 날짜를 추가하는 가장 좋은 방법 인 이유입니다 – Machavity

+2

저는 이것이 일광 절약 시간과 관련이 있다고 생각합니다 - 시간을 출력해도 마치'30/10/2016 00:00 - 30/10/2016 23 : 00'이며, DST로 인해 1 시간 (10 월 30 일)이됩니다 (적어도 내 국가에서는). – Qirel

답변

1

이 문제를 해결하는 방법은과 같이 정오를 추가하는 것입니다 : PHP는 strtotime의 시간 부분에 대해 "지금"가정 있도록 시간을 포함하지 않았기 때문에

$a = strtotime('2016-10-01 12:00'); 
$b = $a+29*24*3600; 
$c = $a+30*24*3600; 
die(date("d/m/Y",$b).' - '.date("d/m/Y",$c)); 

이유는 이유입니다. 그런 다음 10 월에 귀하의 국가 (물론 서버 국가)의 일광 절약 시간제를 적용한 후 마감 시간 값 $c을 다시 가져 왔습니다.

정오 (12:00)를 추가하면 버퍼가 제공됩니다. 12 시가 될 필요는 없습니다. 1시는 근무했지만 개인적으로는 12시와 같이 일하기를 좋아합니다.

+0

고마워! 나는 그것에 대해 생각하지 않고있다. 나는 그것없이 나라에 살고있다. :) – Idi

+0

그냥 php.ini 설정을 확인하고 예 "유럽/베를린". 그것을 "아시아/자카르타"로 바꾸면 해결됩니다. – Idi

+0

도와 줘서 기쁩니다. – Tigger

관련 문제