PHPforループの説明
答え :
解決策:
まず、 date()
を適切に使用していません:
$d = date('2015-05-01');
これにより、パターンに従って現在の日付/時刻がフォーマットされます。 "Y-m-d"
ですが、これらの形式指定子がないため、渡されたもの、つまり文字列が返されます。
次に、 strtotime()
は、2番目の引数が文字列ではなくタイムスタンプであると想定しています。数値以外の文字列が指定されると、文句を言って、おそらく予期していなかったものが返されます。
$ var_dump(strtotime('+1 day', '2015-05-07'));
PHP Notice: A non well formed numeric value encountered in php shell code on line 1
int(88415)
ご覧のとおり、文字列も返しませんが、タイムスタンプを表す整数値を返します。
次のように書くことができます:
$d = date('Y-m-d', strtotime("$d +1 day"));
ただし、この場合は、代わりに DatePeriod
を使用することをお勧めします:
$ tsDateFrom = new DateTime( '2015-05-01 00:00:00');
$ tsDateTo = new DateTime( '2015-05-07 23:59:59');
foreach(new DatePeriod($ tsDateFrom、new DateInterval('P1D')、$ tsDateTo)as $ date){
echo $ date-> format('Y-m-d')、'
';
}
答え :
解決策:
$i = strtotime('+1 day', $i)
は整数を返し、 $i<=$tsDateTo1
では比較できません。
たぶん$i=date('m-d-Y',strtotime($i. "+1 days"));
が機能するでしょう。
PHPをご覧ください-日付形式mm-dd-yyyyに1日追加....便利かもしれません
答え :
解決策:
PHPドキュメントから:
int strtotime ( string $time [, int $now = time() ] )
この関数は、英語の日付を含む文字列が与えられることを想定しています フォーマットし、そのフォーマットをUnixタイムスタンプに解析しようとします( 1970年1月1日00:00:00UTCからの秒数)、 nowで指定されたタイムスタンプ、またはnowが指定されていない場合は現在の時刻。
たとえば、次のようになります。
echo(strtotime("+1 day"));
出力:
1432868203
次に、ご覧のとおり、
strtotime()
は、yy-mm-ddを使用しているため、期待した形式で何かを返しません。実際、
strtotime('+1 day', $i)
はコードでエラーをスローしていますが、これはループが失敗するためです。2つのアドバイス:
- ドキュメントを読む
- PHPエラーレポートをオンにすると、エラーがどこにあるかがわかります。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。