[FuelPHP] Dateクラスの使い方について

3 min read

Date クラスを使うときに毎回調べたり、過去のソースをサルベージするのも面倒なので簡単にまとめてみる。

基本的な使い方

Dateクラスにもメソッドが色々とあるけれど、個人的によく使うものだけメモしておく。(個人的にタイムゾーンあたりは使わないので触れない)

Date::forge

Date::forge(1417484097)

タイムスタンプを渡してやると以下のような Fuel\Core\Date オブジェクト を返す。

Variable #1:
    (Object #35): Fuel\Core\Date ↵
        protected server_gmt_offset (Integer): 32400
        public display_timezone (String): "Asia/Tokyo" (10 characters)
        protected timestamp (Integer): 1417484097
        protected timezone (String): "Asia/Tokyo" (10 characters)

Date::time

Date::time()

現在のタイムスタンプでDate::forge()している。Date::forge( time() )と同じ。
同様に Fuel\Core\Date オブジェクト が返ってくる。

Date::format

Fuel\Core\Dateオブジェクト (Date::forge(1417484097)Date::time()) を指定されたフォーマットで返す(String)。
Date::time()->format('mysql_date')
// -> "2014-12-02"

ちなみに指定できるパターンキーは以下の通り。fuel/core/config/date.php で定義されている。新たに定義を増やす場合は app/config で上書きして使えば良い。

'patterns' => array(
    'local'      => '%c',

    'mysql'      => '%Y-%m-%d %H:%M:%S',
    'mysql_date' => '%Y-%m-%d',

    'us'         => '%m/%d/%Y',
    'us_short'   => '%m/%d',
    'us_named'   => '%B %d %Y',
    'us_full'    => '%I:%M %p, %B %d %Y',
    'eu'         => '%d/%m/%Y',
    'eu_short'   => '%d/%m',
    'eu_named'   => '%d %B %Y',
    'eu_full'    => '%H:%M, %d %B %Y',

    '24h'        => '%H:%M',
    '12h'        => '%I:%M %p'
)

パターンキーを使わないでもお馴染みのフォーマットで指定できる。

Date::time()->format('%Y-%m-%d')
// -> "2014-12-02"

Date::create_from_string

指定の日付文字列から Fuel\Core\Dateオブジェクトを作成する。
Date::create_from_string("2014-12-25" , "mysql_date")

Date::days_in_month

指定の月に日数が何日あるか返す。うるう年の2月ぐらいしか使いどころがないようにも思えるが、逆にうるう年の2月にはかなり使えると思う。
Date::days_in_month(1, 2014)   // 31
Date::days_in_month(2, 2014)   // 28
Date::days_in_month(3, 2014)   // 31
Date::days_in_month(4, 2014)   // 30
Date::days_in_month(5, 2014)   // 31
Date::days_in_month(6, 2014)   // 30
Date::days_in_month(7, 2014)   // 31
Date::days_in_month(8, 2014)   // 31
Date::days_in_month(9, 2014)   // 30
Date::days_in_month(10, 2014)  // 31
Date::days_in_month(11, 2014)  // 30
Date::days_in_month(12, 2014)  // 31

Date::time_ago

Twitterのツイートとかブログの記事とかの日付で重宝しそう。
Date::time_ago(strtotime("12 April 1964"), strtotime("01 March 2012"), 'year'); // 48 years ago
引数 説明
1 タイムスタンプを指定。(必須)
2 比較対象のタイムスタンプ。指定がない場合は現在時刻が適用。
3 結果の時間単位。’second’, ‘minute’, ‘hour’, ‘day’, ‘week’, ‘month’, ‘year’, ‘decade’ (10年) が指定可能。指定がない場合は、大きい単位で結果が返される。

ちなみに Date オブジェクトでも大丈夫みたい

Date::time_ago( Date::forge(1294176140) )  // 4 years ago

get_timestamp()

Dateオブジェクトからタイムスタンプ(int)を取得する。
Date::forge(1294176140)->get_timestamp(); // 1294176140

おわり

PHP の DateTimeクラスでも十分に戦えるけれど、FuelPHPの別クラスと併用するなら Dateクラスを使った方が何かと便利ではあるので、積極的に使っていきたい。