指定日の unixtime を求める方法

id:hnw さんの日記に以下のような投稿がありましたので、反応してみます。

特定の日時のunixtimeが知りたくなった時って皆さんどうしてますか?例えば2009/09/26 23:00:00 JSTであれば次のワンライナーで求められます。

$ php -r 'echo mktime(23,0,0,9,26,2009);'
1253973600

http://d.hatena.ne.jp/hnw/20090926

個人的は、普通に strtotime() を使う気がします。引数で悩む必要がありません。

php -r 'var_dump( strtotime( "2009-09-26 23:00:00" ) );'
int(1253973600)

最近の PHP では、DateTime クラスを使用した方が良いかもしれません。こちらは、strtotime() や mktime() よりも広い範囲を扱えます。

php -r '$d = new DateTime( "2009-09-26 23:00:00" ); var_dump( $d->format( "U" ) );'
string(10) "1253973600"

以下でも同じです。

php -r 'var_dump( date_format( date_create( "2009-09-26 23:00:00" ), "U" ) );'
string(10) "1253973600"

そういえば、以前、以下のような関数を作っていました。php.ini で timezone が設定されていない場合も想定しています。

<?php
function get_unixtime( $format = 'now', $timezone = 'Asia/Tokyo' )
{
    try {
        $datetime = new DateTime( $format, new DateTimeZone( $timezone ) );
        return $datetime->format( 'U' );
    }
    catch ( Exception $ex ) {
        return FALSE;
    }
}