データベースにいくつかの空白のDATETIME値(0000-00-00 00:00:00)があります。
これらをstrtotimeで実行すると、FALSEではなく「1263247058」が返されます。これは、リンクされたページの情報に従って実行する必要があります。
どうして?
ありがとう。
データベースにいくつかの空白のDATETIME値(0000-00-00 00:00:00)があります。
これらをstrtotimeで実行すると、FALSEではなく「1263247058」が返されます。これは、リンクされたページの情報に従って実行する必要があります。
どうして?
ありがとう。
のドキュメントstrtotimeのコメントの1つにあるように、「によって返される値はstrtotime("0000-00-00")PHPのバージョンによって異なります」。したがって、その特定の値について追加のチェックを行うことをお勧めします。
どうして来るのかは他の答えで説明されています。このコードは、値をfalseに強制します。
if ($db_datetime == 0) {
$unix_timestamp = false;
} else {
$unix_timestamp = strtotime($db_datetime);
}
多くのPHP関数は、内部で標準Cライブラリの実装に依存しており、これはstrtotime()の場合である可能性があります。つまり、正確な動作は、PHPが実行されているオペレーティングシステムによって異なります。
無効な日付を検出するためにstrtotime()に依存しない方が良いと思います。
ちなみに...あなたはMySQLを使用していると思います。無効な日付を受け入れないように構成することができます。
私のために働く:\
$ php -r 'var_dump(strtotime("0000-00-00 00:00:00"));'
bool(false)
$
MacOSではPHP5.2.8、CentOS5.2ではPHP5.2.5。同じテストを試すことができますか?結果が異なる場合は、どのバージョンのPHPを使用していて、どのプラットフォームを使用していますか?
FWIW、ゼロ日付の代わりに実際のNULLをデータベースに格納することで、この状況全体を完全に回避できると思います。
次のコード(PHPバージョン5.3.0)の出力を検討してください。
echo date( "h:i:sa m/d/Y", strtotime( '00:00:00' ) ) . "<br/>" ;
echo date( "h:i:sa m/d/Y", strtotime( '00:00:00 00-00-0000' ) ). "<br/>" ;
// Output
12:00:00am 01/12/2010
12:00:00am 01/01/1970