にゃあ

datetimeのnullの扱いがPHPのバージョンで微妙に違う?

MySQLで日付情報を持つ方法のひとつとして、データ型をdatetimeにする方法があります。これにすると、"2008-10-08 12:00:00"のような形で保存されるので、単にタイムスタンプをそのまま保存するより見やすいわけで、自分は好んで使っています。注意しなければならないのがdatetime型はnull値が"0000-00-00 00:00:00"となる点です。

意外とこの仕様がPHPで扱う上でくせ者です。datetime型はPHPでは文字列型として扱われるので、汎用性を持たせるにはstrtotime()などを使って、いったんタイムスタンプに変換する必要があります。

<?php
$timeStamp = strtotime($datetime);
?>

ところが、このstrtotime()の挙動がPHPのバージョンによって微妙に異なるようです。

<?php
var_dump(strtotime('0000-00-00 00:00:00'));
var_dump(date('Y-m-d H:i:s', strtotime('0000-00-00 00:00:00')));
?>

上のコードを異なるバージョンのPHPで試してみました。

5.1.6の実行結果:
int(943887600) 
string(19) "1999-11-30 00:00:00"

5.2.6の実行結果:
bool(false)
string(19) "1970-01-01 09:00:00"

結果はご覧のとおりです。この手の仕様はちょっと困りものです。とりあえずの対策は、文字列が'0000-00-00 00:00:00'のとき分岐するような処理を追加するくらいでしょうか。


コメント&トラバ

トラックバックを送る

無関係なスパムのトラックバックを防止するため、リンク先で本サイト(suin.asia)への言及が確認されないトラックバックは破棄しています。

トラバURL : http://suin.asia/trackback/101

コメントを書く

お名前* URL
本文*
合い言葉* ←「14ralorvet」と入力して下さい。
* この記事の話題と関係ないコメントはどんな内容でも削除します。(移動できないので)

トラックバック

トラックバックがないのはさみしいにゃん…。

コメント

コメントはないです。誰かコメント書いてよぅ…。

Author

Submenu

Recent Entries

XOOPS Cube Dev Ring

氷川 XOOPS Module 開発室

Recent Comments

Recent Trackbacks