2011-11-11 11 views
5

7/1/2005の代わりに6/30/2005を返すように機能すると予想しました。php:strtotime( "12/31/2004 + 6月")); 6月の最終日を返さない

print date("m/d/Y", strtotime("12/31/2004 +6 month")); 

同様に、print date("m/d/Y", strtotime("1/31/2011 +1 month"))戻り03/03/2011一方は、2/28/2011を返したいです。

追加された月の最後の日を表示するにはまっすぐな方法があるのですか?

+0

私が正しく覚えている場合、 'strtotime'はヨーロピアンスタイルの日付で動作します。 '31/1/2011'などを試してください –

答えて

6

これはいかがですか?

echo date("m/d/Y", strtotime("last day of 12/31/2004 + 6 month")); // 6/30/2005 
echo date("m/d/Y", strtotime("last day of 1/31/2011 + 1 month")); // 2/28/2011 

Demo

編集:あなたの参考のため、ここdocumentation for relative timesへのリンクです。

0

1つの簡単な方法は、実際に1ヶ月先に行って、の値をゼロにすることです。また、mktime()は簡単かもしれません。

$mymonth = 2; // I want the last day of February 
echo date('m/d/Y', mktime(0,0,0,$mymonth+1,0,2011)); 

これは2011年2月28日に返されます。その月enoghe日がない場合のstrtotimeは来月に続けるよう

2

、 あなたは6ヶ月をバックアップして確認することができれば、開始日にその最後まで

$date2 = date("Y-m-d", strtotime("{$date} +6 months")); 
    $date3 = date("Y-m-d", strtotime("{$date2} -6 months")); 
    if($date3 != $date) 
    { 
    $date2 = date("Y-m-t", strtotime("{$date2} -1 months")); 
    } 

(またはあなたの場合は " m/t/Y ")

0

strtotimeは、矛盾する情報で可能な限り最良です。

1/31/2011 +1month 

を言うことは

2/31/2011 

に進む意味が、2月は28(時には29)日があるでしょう。 2011年はうるう年ではないため、「2月31日」は「3月3日」に正規化されます。

'12/31/2004 + 6month 'についても同様です。それはあなたを2005年6月31日に連れて行きます。しかし、6月は30日しかないので、代わりに7月1日に正規化されます。

関連する問題