• ベストアンサー

phpでの日付の変換について

お世話になります。 たびたびの質問で申し訳ありません。 phpで 2014年03月07日を2014年3月7日と言う形に変換させる際に どのような方法がございますでしょうか。 自分なりに調べてstrtotimeなども考えてみたのですが 日付もおかしく、文字化けをしてしまう状況でした・・。 正規表現などもなかなか理解できないレベルのため、 お手数をおかけしますがご教授いただけましたら幸いです。

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

  • ベストアンサー
noname#244856
noname#244856
回答No.2

そもそもUTF-8以外でPHPスクリプトを書いている時点でちょっと…普通はUTF-8で書きますね。UTF-8以外だと以下のような弊害が起こります。このメソッドでもstr_replace関数同様です。 Qiita - 【PHP入門講座】 文字列 #UTF-8だけが正しく扱われる理由 http://qiita.com/mpyw/items/d61b50d90e84e289e2be#1-5 【解決策】 1. UTF-8を使う これが最良の選択肢です。以下を参考にどうぞ。 Qiita - 【PHP入門講座】 PHPを使うための準備 #テキストエディタの導入 http://qiita.com/mpyw/items/4508dc677b11e487effc#1-5 2. mb_ereg_replace関数を使う 結局正規表現になりますが、すべて漢字を「/」に変換してからという方法で。 str_replaceやpreg_replaceは使えないのでmb_ereg_replace1択になります。 Windows標準の文字セットは「Shift_JIS」ではなく「CP932」なので注意を。 $text = '2014年03月07日'; mb_regex_encoding('CP932'); $text = date('Y年n月j日', strtotime(mb_ereg_replace('[年月日]', '/', $text))); それかこういう方法でもいいかもしれません。頭のゼロを削除するということで。 $text = '2014年03月07日'; mb_regex_encoding('CP932'); $text = mb_ereg_replace('(?<!\d)0++', '', $text);

boroko
質問者

お礼

お忙しい中、重ね重ねご教授いただきましてありがとうございます。 csvの文字コードがshift_jisになっておりまして、 処理の所で文字化けをしてしまうのが面倒に思ってしまいまして phpをshift_jisで書いておりました。 csvの文字コードをphp内でutf-8に変換しますと なぜか文字化けがところどころに発生してしまい 無知なところで上手くいきませんでしたのでphp側をshift_jisで書いておりました。 ご教授いただきました正規表現の方で対応させていただきます。 こちらの意味も勉強します。ありがとうございます。 何度もお時間を割いていただき本当にありがとうございました。

その他の回答 (1)

noname#244856
noname#244856
回答No.1

strtotimeは日本語フォーマットに対応していないので、DateTimeを使いましょう。 DateTime::createFromFormat http://www.php.net/manual/ja/datetime.createfromformat.php $text = '2014年03月07日'; $text = DateTime::createFromFormat('Y年m月d日', $text)->format('Y年n月j日');

boroko
質問者

お礼

お忙しい中、ご回答ありがとうございます。 たびたびお手数をおかけして申し訳ありません。 ご教授いただいた方法でやってみたのですが、 shift_jisだからまずいのでしょうか・・・。 年のところでどうしても文字化けしてしまいます。 ですので、 $text = '2014年03月07日'; $text = DateTime::createFromFormat('Y年m月d日', $text)->format('Y/n月j日'); $text = str_replace("/", "年", $text); と言う形でまわりくどい事をしたのですが、おかしいでしょうか。 他に効率の良い方法がございましたら お手数をおかけして申し訳ありませんがご指導いただけるようでしたら幸いです。

関連するQ&A