phpで2007-05-06という形のhizuke(MySQLに保存されているもの)から日付の数字を取り出して、計算に使いたいと思っています。

(例:5月6日なら、「6」を抽出」

http://q.hatena.ne.jp/1177317240 以前の日付に関する質問で Mook さんに教えていただいた方法を参考にして、自分なりに考えてみました。

// hizuke より日付一桁を抽出するための関数
function getHizukedate( $dd ) {
// - で日付を分割
$dArray = explode( "-" , $dd );
$stamp = mktime( 0, 0, 0, $dArray[1], $dArray[2], $dArray[0] );
// printf で整形して表示
printf("%d", date( "j", $stamp ));
}

$hizuke_date = getHizukedate($row["hizuke"]);
$hizuke_date_int = intval($hizuke_date);

(↑$hizuke_date = getHizukedate($row["hizuke"]);だけではうまくいかなかったので、文字列を数値に変換しなければならないのかなあと思って、intvalをやってみました)

これで、例えば、

$kakezan = 30 * $hizuke_date_int;
print $kakezan;

とやってみても、うまくできません。(0が表示された)

しかも、printfを使っているからか、「$hizuke_date = getHizukedate($row["hizuke"]);」のところで、一度数字が表示されちゃうし、それならsprintfかな、と変えてみると、今度は全く動きませんでした。

アドバイスをいただけると助かります。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/05/06 23:59:44
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント100pt

関数を使って値を取得したい場合は、関数側で return を使用します。

PHP 基礎編4 - 基本事項、ユーザ関数、function、return、global、static


トライされた例をそのまま使用すると、

<?
// hizuke より日付一桁(?)を抽出するための関数
function getHizukedate( $dd ) {
    // - で日付を分割
    $dArray = explode( "-" , $dd );
    $stamp = mktime( 0, 0, 0, $dArray[1], $dArray[2], $dArray[0] );
    // printf で整形して表示
    return date( "j", $stamp ); // 関数の値として日付を返す
}

$hizuke_date = getHizukedate('2007-05-06');
$kakezan = 30 * $hizuke_date; // この例では $hizuke_date は 6
print $kakezan;
?>

といった感じでしょうか。


日付の部分を取得する関数として実装しましたが、日の内一桁目(1の位)を取り出したい場合は

     return date( "j", $stamp ) % 10; 

のようにします。


ただ、前回の例は曜日を出すために日付の計算をしましたが、日の部分だけを取り出すなら、

<?
// hizuke より日付一桁(?)を抽出するための関数
function getHizukedate( $dd ) {
    // - で日付を分割
    $dArray = explode( "-" , $dd );
    return $dArray [2];
}
?>

でもできます。

id:sun-chan

ありがとうございます。

日の内一桁目(1の位)を取り出す、となると、たとえば25日だったら「5」のみになるんですよね?

2007/05/06 22:56:08

その他の回答2件)

id:chuken_kenkou No.1

回答回数722ベストアンサー獲得回数54

ポイント30pt

day関数で、date型の値から日付部分のみ抽出できます。

select day(日付の列名) as hizuke
 from 表名
 where 検索条件

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.4 日付と時刻関数

id:sun-chan

今回は直前の select 文から hizuke 以外の要素も一緒に取り出しているので、php内でなんとかならないのかなーと思っていたんですが、そうじゃなかったら、MySQLから直接取り出すというのも良さそうですね。


ありがとうございます。

2007/05/06 23:10:12
id:Mook No.2

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント100pt

関数を使って値を取得したい場合は、関数側で return を使用します。

PHP 基礎編4 - 基本事項、ユーザ関数、function、return、global、static


トライされた例をそのまま使用すると、

<?
// hizuke より日付一桁(?)を抽出するための関数
function getHizukedate( $dd ) {
    // - で日付を分割
    $dArray = explode( "-" , $dd );
    $stamp = mktime( 0, 0, 0, $dArray[1], $dArray[2], $dArray[0] );
    // printf で整形して表示
    return date( "j", $stamp ); // 関数の値として日付を返す
}

$hizuke_date = getHizukedate('2007-05-06');
$kakezan = 30 * $hizuke_date; // この例では $hizuke_date は 6
print $kakezan;
?>

といった感じでしょうか。


日付の部分を取得する関数として実装しましたが、日の内一桁目(1の位)を取り出したい場合は

     return date( "j", $stamp ) % 10; 

のようにします。


ただ、前回の例は曜日を出すために日付の計算をしましたが、日の部分だけを取り出すなら、

<?
// hizuke より日付一桁(?)を抽出するための関数
function getHizukedate( $dd ) {
    // - で日付を分割
    $dArray = explode( "-" , $dd );
    return $dArray [2];
}
?>

でもできます。

id:sun-chan

ありがとうございます。

日の内一桁目(1の位)を取り出す、となると、たとえば25日だったら「5」のみになるんですよね?

2007/05/06 22:56:08
id:tezcello No.3

回答回数460ベストアンサー獲得回数69

ポイント50pt

日付書式の文字列をタイムスタンプにする関数が用意されているので使ってみてはどうですか?

http://www.php.net/manual/ja/function.strtotime.php

これを使えば、わざわざ自作するまでもないでしょう。

$row["hizuke"] = '2007-05-06'; // 実際はこの行は不要ですね
$hizuke_date = date('j',strtotime($row["hizuke"]));
$kakezan = 30 * $hizuke_date;
print $kakezan;

の結果は、180 となると思います。

id:sun-chan

はー、いろいろあるんですね…


ありがとうございます!

2007/05/06 23:08:16
  • id:Mook
    多くのポイントとイルカ賞ありがとうございました。

    >日の内一桁目(1の位)を取り出す、となると、たとえば25日だったら
    >「5」のみになるんですよね?
    は、その通りです。

    今回のケースでは日付を取得したいだけであれば、SQL で書いてしまった方が簡単だと思いますが、関数の使い方をトライされていたので、その方向で回答いたしました。

    一つの目的でもやり方はいろいろあるので、いろいろとお試しください。
    ライブラリもけっこういろいろなものがありますが、関数を利用することで幅を広げられる局面は多いので、いずれにせよ関数の使い方を覚えておいて損はないと思います。

  • id:sun-chan
    Mookさんありがとうございます。

    自分なりにいろいろ調べたり、試してみたりはしているんですが、どうも要領が悪いようで、ちょっとしたことで半日ぐらいも立ち止まってしまったりしています。

    関数を使ってみたり、ライブラリを使ってみたり、いろいろやってみて勉強していきたいと思います。

    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません