• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP mysql 時刻表示方法)

PHPでデータベースに登録された時刻を表示する方法とは?

このQ&Aのポイント
  • PHP初心者の方から、データベースに登録されている時刻を表示する方法についての質問です。
  • 現在の表示方法では、時刻の時が西暦と表示されてしまっています。24時間方式の表示に変更したい場合、どのようにすればよいでしょうか?
  • 質問のコードを確認すると、登録時刻と編集時刻を取得し、指定のフォーマットで表示していることがわかります。24時間方式の表示に変更する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.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バイト文字で使用した事による不具合ですね。 文字コードの関係で、偶然"年"に不具合が出ただけで他の文字を使用した場合、その文字で不具合が出る可能性もあった。 今回、偶然に不具合が出ていなければ、今後原因が判りにくいバグが生まれる元になりかねませんでした。 という意味で、非常に申し訳ない。

h-h13
質問者

お礼

ご回答有難うございます。 また、ご返信が遅くなり申し訳ありません。 できました。 本当にいろいろと有難うございます。 また、何かありましたらご教授お願いいたします。

その他の回答 (3)

  • buraru
  • ベストアンサー率54% (12/22)
回答No.3

横槍失礼します。 >2010・04月03日 12:00:00 >と年のとこだけ・になってしまいます。 文字コードにSJISを利用していらっしゃるようなので恐らくそれが原因です。 http://oshiete1.goo.ne.jp/qa5767646.html の記事でも別の方が触れていますが、SJISではインジェクションなどに対して脆弱です。 特に理由が無ければ文字コードを変更した方が良いと思います。 それと、大きなお世話ですが、プログラミングを勉強する場合、無理に飛び段すると後でグダグダになります。 過去記事を見る限り、随分と身の丈に合わないをやろうとしていらっしゃるようです。 作りたい物があれば急く気持ちはわかりますが、急がば回れとも言いますし、最低でもPHPマニュアルなどに一通り目を通して、PHPでどんな事が出来るか程度は把握し、簡単な掲示板くらいは自力で組めるようになってから会員システム風のものに取り組んだ方が良いと思います。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

バグの原因は#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; ?>

h-h13
質問者

補足

ご回答有難う御座います。 $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 と年のとこだけ・になってしまいます。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

一度、$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 昔、誰かが言っていた言葉です。 「プログラムは思ったとおりに動かない。書いた通りに動く。」

h-h13
質問者

補足

ご回答有難う御座います。 >「プログラムは思ったとおりに動かない。書いた通りに動く。」 この言葉とても心に響きました。 有難う御座います。

関連するQ&A

専門家に質問してみよう