質問: "%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時間方式の表示に変更したいのですが、 お分かりのかたいらっしゃいましたらご教授お願いいたします。
回答: 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バイト文字で使用した事による不具合ですね。 文字コードの関係で、偶然"年"に不具合が出ただけで他の文字を使用した場合、その文字で不具合が出る可能性もあった。 今回、偶然に不具合が出ていなければ、今後原因が判りにくいバグが生まれる元になりかねませんでした。 という意味で、非常に申し訳ない。