2016-10-01 11 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)); 

は、私は$c31/10/2016の代わり30/10/2016ことを期待ので、どのように奇妙な30/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'で、10月30日(少なくとも私の国では)1時間(DSTのため)を減算します。 – 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)を追加するとバッファが作成されます。 1時が働いているように12時である必要はありませんが、私は個人的に12時に仕事をしたいと思います。

+0

ありがとう!私はそれについて考えなかった。私はそれがない国に住んでいる。:) – Idi

+0

ちょうどphp.iniの設定をチェックし、それは "Europe/Berlin"だ。それを「アジア/ジャカルタ」に変更して解決しました。 – Idi

+0

お役に立ててうれしいです。 – Tigger

関連する問題