[PHP-users 4378] Re: 日付型データから月の取り出しができない

Osamu Shigematsu php-users@php.gr.jp
Thu, 20 Dec 2001 17:01:24 +0900


重松です。こんにちは。

SQL ではなくて、どうしても、PHP でやりたいようですね。;-)

on 01.12.20 4:43 PM, Kiyohito Tanaka at tanaka-tec@masecon.co.jp wrote:

> $data=pg_result($result,0,0);←DBから取得
> print("$data\n");←加工せずにそのまま表示。これはOK
> $data_month=date("m",$data);←年月日より月を取得しようとしている
> print("$data_month\n");←月のみ表示。OUT・・・01となる

変数には、「型」があるのは、理解していますか?
文字列である、"2001-01-01" というものと、date() 関数が引数に取る
UNIX timestamp (数値) は型が違いますから、相互に変換する必要がある、
というのは、先に藤田さんがその間数の名前まで説明済みです。

つまり、http://www.php.net/manual/ja/function.date.php には、

    string date (string format, int [timestamp])

とあるのに、あなたは、string であるところの日付文字列を date() 関数に
渡して、date() 関数はそれを数値に単純に cast したために、予期しない結果に
なっているのでしょう。

    int mktime (int hour, int minute, int second, int month,
        int day, int year, int [is_dst])

を使って timestamp に変換しましょう。

    // 文字列 $data を区切り文字 '-' で分割した配列とし、
    // 各要素を $yy, $mm, $dd に受け取る
    // このとき、$yy, $mm, $dd はまだ「文字列」
    list($yy,$mm,$dd) = explode('-',$data);
    
    $timestamp = mktime(0,0,0,$mm,$dd,$yy);

というか、月を取得するだけなら、

    list(,$mm) = explode('-',$data);

でおしまいでは?

上記と同じ (ようなこと) をする関数に srtotime() というのもあります。

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp