web-dev-qa-db-ja.com

PHP strtotime +1ヶ月追加の月を追加

今日に1か月を追加する単純な変数があります。

$endOfCycle = date("Y-m", strtotime("+1 month"));

今日は2013年1月ですので、2013-02に戻る予定ですが、代わりに2013-03になります。 3月にジャンプする理由がわかりません。

19
Jason

今日は1月29日であるため3月にジャンプし、月を追加すると2月29日になりますが、これは存在しないため、次の有効な日付に移動します。

これは多くの月の31日にも発生しますが、1月から2月の場合は2月が短いため、明らかに顕著です。

月の日付に興味がなく、翌月を指定したい場合は、入力月を現在の月の最初に指定する必要があります。これにより、月を追加すると常に正しい答えが得られます。

同じ理由で、常に翌月の最終日を取得したい場合は、希望する月の翌月の最初の日を計算し、日を引くことから始めます。

21
SDC

これは

$endOfCycle=date('Y-m-d', strtotime("+30 days"));

strtotime

米国英語の日付形式を含む文字列が与えられ、その形式を解析して、現在のタイムスタンプと比較して、Unixタイムスタンプ(1970年1月1日00:00:00 UTCからの秒数)、または現在が指定されていない場合は現在の時刻。

while

date

指定された整数のタイムスタンプまたはタイムスタンプが指定されていない場合は現在の時刻を使用して、指定された書式文字列に従って書式設定された文字列を返します。

次のマニュアルページを参照してください:

17
One Man Crew

このコードを使用して、次の月を取得できます。

$ts = mktime(0, 0, 0, date("n") + 1, 1);
echo date("Y-m-d H:i:s", $ts);
echo date("n", $ts);

今日は2013-01-31 01:23:45上記が返されます:

2013-02-01 00:00:00
2
4
Salman A

今日は1月29日、+ 1月は2月29日を意味しますが、今年の2月は28日であるため、翌日である3月1日と重複します

代わりに試してください

strtotime('next month')
2
Blacksonic

たぶん、2013-01-29の+1か月は2013-02-29であり、存在しないので2013-03-01になります。

試すことができます

date('m/d/y h:i a',(strtotime('next month',strtotime(date('m/01/y')))));

http://php.net/manual/en/function.strtotime.php のコメントから

1
Trudbert