【最大10000ポイント】当たる!!質問投稿キャンペーン!

データベースに登録されている時刻を表示する方法についてご質問があります。

PHPは初心者です。

コードは以下になります。

$row = mysql_fetch_array($result_member);
if ($row) {
$m_reg_date = $row['reg_date'];
$m_edit_date = $row['edit_date'];
}
}

$str_reg = $m_reg_date;
list($m_reg_year,$m_reg_month,$m_reg_day) = explode("-",$str_reg);
$format_reg = "%04d年%02d月%02d日";

$str_edit = $m_edit_date;
list($m_edit_year,$m_edit_month,$m_edit_day) = explode("-",$str_edit);
list($m_edit_hour,$m_edit_minute,$m_edit_second) = explode(":",$str_edit);
$format_edit = "%04d年%02d月%02d日 %02d:%02d:%02d";

という記述をしており、

<?php printf($format_edit, $m_edit_year, $m_edit_month, $m_edit_day, $m_edit_hour, $m_edit_minute, $m_edit_second); ?>
で表示させています。

しかし、こちらの表示方法だと
2010年04月03日 2010:43:22
と表示されてしまい、時刻の**時がなぜか西暦になってしまいます。
こちらを24時間方式の表示に変更したいのですが、
お分かりのかたいらっしゃいましたらご教授お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

date関数は、2バイト文字に対応していないようですね、失礼しました。


※確かに、mb_dateではないですね。当方、'Y/m/d H:i:s'、'Y-m-d H:i:s'のいずれかしか使用したことがなかったため、そのあたり把握していませんでした。

2バイト文字を外すと以下のような形に変更することが考えられます。
$timeReg = strtotime($row['reg_date']);
$format_reg= date('Y',$timeReg).'年'.date('m',$timeReg).'月'.date('d',$timeReg).'日';
$timeEdit = strtotime($row['edit_date']);
$format_edit= date('Y',$timeEdit).'年'.date('m',$timeEdit).'月'.date('d',$timeEdit).'日 '.date('H:i:s',$timeEdit);


ただ上記のように変更するのであれば、date関数ではなくgetdate関数の方が良いかも知れません。
getdate関数は、年月日時刻を各要素に分割して、連想配列で返してくれる関数です。

$arrReg = getdate(strtotime($row['reg_date']));
$format_reg= "{$arrReg['year']}年{$arrReg['month']}月{$arrReg['mday']}日";
$arrEdit = getdate(strtotime($row['edit_date']));
$format_edit= "{$arrEdit['year']}年{$arrEdit['month']}月{$arrEdit['mday']}日 {$arrEdit['hours']}:{$arrEdit['minutes']}:{$arrEdit['seconds']}";

2バイト文字に対応していない関数を、2バイト文字で使用した事による不具合ですね。
文字コードの関係で、偶然"年"に不具合が出ただけで他の文字を使用した場合、その文字で不具合が出る可能性もあった。
今回、偶然に不具合が出ていなければ、今後原因が判りにくいバグが生まれる元になりかねませんでした。
という意味で、非常に申し訳ない。
    • good
    • 0
この回答へのお礼

ご回答有難うございます。

また、ご返信が遅くなり申し訳ありません。

できました。
本当にいろいろと有難うございます。

また、何かありましたらご教授お願いいたします。

お礼日時:2010/04/06 01:40

横槍失礼します。



>2010・04月03日 12:00:00
>と年のとこだけ・になってしまいます。

文字コードにSJISを利用していらっしゃるようなので恐らくそれが原因です。

http://oshiete1.goo.ne.jp/qa5767646.html
の記事でも別の方が触れていますが、SJISではインジェクションなどに対して脆弱です。
特に理由が無ければ文字コードを変更した方が良いと思います。

それと、大きなお世話ですが、プログラミングを勉強する場合、無理に飛び段すると後でグダグダになります。
過去記事を見る限り、随分と身の丈に合わないをやろうとしていらっしゃるようです。
作りたい物があれば急く気持ちはわかりますが、急がば回れとも言いますし、最低でもPHPマニュアルなどに一通り目を通して、PHPでどんな事が出来るか程度は把握し、簡単な掲示板くらいは自力で組めるようになってから会員システム風のものに取り組んだ方が良いと思います。
    • good
    • 0

バグの原因は#1の方の言うとおり。



とてつもなく面倒な事をわざわざしているな、と思うので、別解をば。
strtotimeで、日付を意味する文字列から日付型変数に変換
dateで、日付型変数から、日付フォーマットされた文字列に変換

$row = mysql_fetch_array($result_member);
if ($row) {
$format_reg= date('Y年m月d日',strtotime($row['reg_date']));
$format_edit = date('Y年m月d日 H:i:s',strtotime($row['edit_date']));
}
}

---表示部分---
登録日:<?php echo $format_reg; ?>
最終更新日:<?php echo $format_edit; ?>

この回答への補足

ご回答有難う御座います。

$row = mysql_fetch_array($result_member);
if ($row) {
$format_reg= date('Y年m月d日',strtotime($row['reg_date']));
$format_edit = date('Y年m月d日 H:i:s',strtotime($row['edit_date']));
}
の記述の方がわかりやすくまとめられました。

ただ、Y年m月d日 H:i:sを表示させれると
2010・04月03日 12:00:00
と年のとこだけ・になってしまいます。

補足日時:2010/04/03 12:01
    • good
    • 0

一度、$m_edit_hour を echo() してみるといいと思いますよ。



例えば、
$m_edit_date = "2010-04-03 03:43:22";
だったとしたら、多分、$m_edit_hour の 値は↓みたいになってると思いますから。

2010-04-03 03

PHPの命令が何をしているのか 少しぐらいは理解して使ったほうがいいと思いますよ。
http://php.net/manual/ja/function.explode.php

昔、誰かが言っていた言葉です。
「プログラムは思ったとおりに動かない。書いた通りに動く。」

この回答への補足

ご回答有難う御座います。

>「プログラムは思ったとおりに動かない。書いた通りに動く。」
この言葉とても心に響きました。

有難う御座います。

補足日時:2010/04/03 11:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング