忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/23 00:39 |
ZF-01:モジュールを使ってみる:Zend_Date

ZendFrameworkはCakePHPやEthna等と同じくフレームワークの一種ですが、特徴として各コンポーネントの独立性が高く、一部のモジュールだけを単体で使うことができます。
つうか本気で使用するにはmod_rewriteとかMVCの準備とかいろいろ必要でどうすりゃいいのかよくわからん。

まあモジュールをちょっと使ってみるだけならPear並に簡単です。
まず公式からダウンロードしてきたら適当な場所に解凍します。
で、その中のlibraryフォルダにインクルードパスを通せば後は好きなモジュールを使用することができます。

それどころかpearコマンドでもインストールでき、そうすると本気でPearと同等です。
# cd C:\xampp\php
# pear channel-discover zend.googlecode.com/svn
# pear install zend/zend

こんなかんじで実行するとC:\xampp\php\PEAR\Zendあたりに堂々とインストールされ、後はPearライブラリ呼ぶときと全く同じ使い方ができます。

まあ適当に、試しに簡単そうなZend_Dateを使ってみます。

zend_date1.php 

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    
    //Zend_Dateを使用するための初期設定
        date_default_timezone_set('Asia/Tokyo');
    
    //Zend_Date
        require_once('Zend/Date.php');
        $date = new Zend_Date();
    
    //適当に使ってみる
        print $date->get();
        $date->set('13:00:00',Zend_Date::TIMES);
        print $date->get();

Fatal error: Uncaught exception 'Zend_Date_Exception' with message 'Missing locale file 'C:\xampp\php\PEAR\Zend\Locale/Data/ja.xml' for 'ja' locale.' in C:\xampp\php\PEAR\Zend\Date.php:2136 Stack trace: #0 C:\xampp\php\PEAR\Zend\Date.php(989): Zend_Date->_calculate('set', '13:00:00', 'WW', NULL) #1 C:\xampp\htdocs\index.php(12): Zend_Date->set('13:00:00', 'WW') #2 {main} thrown in C:\xampp\php\PEAR\Zend\Date.php on line 2136

あれ?
C:\xampp\php\PEAR\Zend\Locale/Data/を見てみると、本来入っているべきja.xmlやja_JP.xmlなんかが一切存在しませんでした。
なぜだらう?
仕方ないのでこのフォルダだけ手動でコピペした。

zend_date2.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    
    //Zend_Dateを使用するための初期設定
        date_default_timezone_set('Asia/Tokyo');
    
    //Zend_Date
        require_once('Zend/Date.php');
        $date = new Zend_Date();
    
    //適当に使ってみる
        print($date->get());
        
        $date->set('11092210232008','mmMMHHddssyyyy');
        print($date->get('yyyy年MM月dd日(E曜日) HH時mm分ss秒'));
        
        $date->add('22:00:00',Zend_Date::TIMES);
        print($date->get(Zend_Date::RFC_2822));

何が便利って入力値のフォーマットを指定できる!!
DBから取得した日時をstrtotime()に突っ込んだつもりが何故かVARCHAR型に変なフォーマットで入ってて理解できねーと言われた、とかいうような腐った設計でもこれで安心。
例にある'11092210232008'のような意味不明な文字列ですら、'2008年09月10日(水曜日) 22時11分23秒'と引数通りの解釈を行ってくれます。

また日付の足し引きや比較といった計算もadd()やsub()、isLater()等で自由に行うことができます。
http://framework.zend.com/manual/ja/zend.date.overview.html#id.date.basic.operations
計算の場合も第二引数で入力値の形式を指定することができるので、日時形式をいちいち分解してmktime()に突っ込んだり、使い方が微妙に不自由なDateTime::addを使用したりせずに済みます。

日時形式を設定、取得するために多数の定数が用意されており、決まった形式なら定数を使えます。
http://framework.zend.com/manual/ja/zend.date.constants.html#zend.date.constants.list
まあ、Zend_Date::DAYって書くより'dd'って書く方が早いような気もしないでもないですが。

いやあ、しかしZend_Date便利だね。
これが普及してくれれば現行の日付関数全部要らなくなるんだが。

注意点としては、西暦-99年~-01年の値を'yyyy'で取得しようとすると00-1とかいう形になってしまいます。
Zend_Date::YEARだときちんと-1になるんですがね。
古めの記事だと999年以前やZend_Date::YEARでもおかしかったみたいだけど、そこらへんは直ったみたい。
PR


2009/08/06 12:36 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP1-84:クラスっぽい投稿フォーム作る | HOME | ジャンラインのライバルはジャンラインだけ>>
忍者ブログ[PR]