[PHP-users 31359] Re: strtotime()関数での日付加算

フェアウェイズ・テクノロジー 五 フェアウェイズ・テクノロジー 五
2007年 2月 1日 (木) 23:14:10 JST


五十嵐と申します。

> mktime()関すに渡す引数をひとつずつみると、
> $base_timestampを"2007-01-31"のタイムスタンプのとき、
> date("m",strtotime("+3 month",$base_timestamp) の値が「5」に
> なってしまっています。(期待値は「4」)
> mktime()での末日の求め方は、PHPのマニュアルを参考にしました。
> これは1/31に限っておこるものなのか、算出方法に問題があるのか、
> よくわかりません。

4/31は存在しないので次の日である5/1と解釈してしまうようです。
今回求めようとしている内容であれば、当月1日から求めれば上記の症状に当ら
ないと思いますので、以下でどうでしょうか?

<?
$base_timestamp    = strtotime(date("Y-m-01 H:i:s",time()));//当月1日
$request_timestamp = mktime( 0,0,0
	, (integer)date("m",strtotime("+2 month",$base_timestamp))
	, (integer)date("t",strtotime("+2 month",$base_timestamp))
	, (integer)date("Y",strtotime("+2 month",$base_timestamp))	);
echo date("Y-m-d",$request_timestamp);//2ヵ月後末日
?>




PHP-users メーリングリストの案内