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

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のうるう年対応:

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

2019年5月
      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 31  
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント