人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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かな、と変えてみると、今度は全く動きませんでした。

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

●質問者: sun-chan
●カテゴリ:ウェブ制作
✍キーワード:5月6日 DD MySQL PHP print
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● chuken_kenkou
●30ポイント

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

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

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

◎質問者からの返答

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


ありがとうございます。


2 ● Mook
●100ポイント ベストアンサー

関数を使って値を取得したい場合は、関数側で 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];
}
?>

でもできます。

◎質問者からの返答

ありがとうございます。

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


3 ● tezcello
●50ポイント

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

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 となると思います。

◎質問者からの返答

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


ありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ