2017-01-25 12 views
0

他の2つの日付の間に日付を印刷しようとしています。このコードは25/01/2017と31/01/2017代わりの間だけで日付を印刷しているいくつかの理由 http://sandbox.onlinephpfunctions.com/code/34c4b721553038f585806798121941bee0c66086PHPの他の2つの日付間の日付の印刷

$begin = date("d/m/y"); 
$end = date("d/m/y", strtotime("+1 month")); 

$i = 0; 
while(strtotime($begin) <= strtotime($end)){ 

    echo "$begin\n"; 

    $i++; 
    $begin = date("d/m/y", strtotime("+$i day")); 

} 

はあなたがここに同じコードを実行することができます:ここに私のコードです20/01/2017および25/02/2017私は何が間違っているのか分からない。誰か助けてくれますか?

+0

私は間違っていますが、なぜあなたは 'date()'を使っていますか?これは 'strtotime()'だけで行うことができます。そして、反復では関数の呼び出しが少なくなります。 – JustOnUnderMillions

答えて

2

strtotime()d/m/y形式の日付に対応していません。これらの日付はm/d/yと扱われます。

コードを修正するには、最初の2行にY-m-d形式を使用します。

サイドノートでは、\DateTimeクラスを使用して文字列と整数の代わりに日付を操作することをおすすめします。ここをクリックしてください:https://paulund.co.uk/datetime-php

+0

それで簡単!友よありがとう。これは多くの助けになりました! –

+0

'はサポートしていません'は正しくありません( 'echo date( 'Y-m-d'、strtotime('01/01/2017 '));')、それはある意味バグです。それをサンドボックスリンクでテストします。 strtotimeがd/m/yをサポートしていない場合、最初の日付が正しく表示されるのはなぜですか?それは月のスイッチになると壊れてしまいます。 – JustOnUnderMillions

+0

はい、 'strtotime('02/02/2017 ')'、 'strtotime('03/03/2017')'のようにも動作します。私はあなたの理由を理解するためにそれを残します。 –

2
<?php 
error_reporting(-1); 
ini_set('display_errors', true); 

$begin = new DateTime(); 
$end = (new DateTime())->modify('+1 month'); 
$interval = DateInterval::createFromDateString('1 day'); 

$period = new DatePeriod($begin, $interval, $end); 

foreach ($period as $date) { 
    echo $date->format('d/m/y')."<br/>"; 
} 
関連する問題