« 減量と引き換え | トップページ | 雨の日ウォーク&ラン »

2012.02.24

[php] 日付演算 DateTime/DateIntervalのうるう年対応

仕事で関わっているシステムで、日付の演算(一日あととか一ヶ月前など)でDateTimeクラスとDateIntervalクラスを使っていたのですけど、うるう年に対応していなくて声を上げて驚いた。

2012年3月1日の前日を取得するコード。

$d = new DateTime();
$d->setDate(2012,3,1);
$d->sub(new DateInterval('P1D'));
$t = $d->getTimestamp();
echo date('Y-m-d', $t);

出力結果はまさかの2012-02-28。これはいろいろな局面でまずいでしょ。見間違いかと何度かやってみたがダメ。

仕方が無いので別なやり方。以下のような記述が出来ることを発見して事なきを得た。この「演算内容を文字列として書く」というところがイヤなんだけど、まー仕方がない。このほうが短くなるし。

$t = strtotime("2012-03-01 -1 days");
echo date('Y-m-d', $t);
//出力結果  2012-02-29

しかし、こんな単純なバグがあるもんか?と自宅でやってみたら正しい結果。バージョン違いかな。ちなみにホスティングしているサーバーでは、DateTimeが使えなかった(笑)。

いろいろ勘案すると、DateTime/DateIntervalは使わないほうがよいのかな。ちょっとイカレタ仕様だし(笑) ― 特にDateIntervalのコンストラクタとか目を疑うしw

« 減量と引き換え | トップページ | 雨の日ウォーク&ラン »

プログラミング」カテゴリの記事

php」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: [php] 日付演算 DateTime/DateIntervalのうるう年対応:

« 減量と引き換え | トップページ | 雨の日ウォーク&ラン »

2020年6月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント