• ベストアンサー

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

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

  • PHP
  • 回答数2
  • ありがとう数13

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

  • ベストアンサー
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

  • strtotime 日付の変換

    PostgreSQLの中にある「2007/07/07-15:19」(文字列)という日付を、PHPで「Thu, 10 Jul 2007 15:19:00 +0900」という形に直すにはどうしたらいいんでしょうか? データベースから日付を取得したまではいいのですが、その後の変換ができずに困っています。strtotime関数を使えばいいらしいというのは聞いたんですが・・・。

    • ベストアンサー
    • PHP
  • 日付をタイムスタンプに直す方法

    例えば、"2009/04/01 7:40:00"という日付を タイムスタンプに直す方法を教えて下さい。 strtotimeとmktimeどちらでもいいのでしょうか? 正規表現を使って置換する方法を教えてください。

    • ベストアンサー
    • PHP
  • Oracleでの日付の変換

    例えば「04-01-28」という日付型を「YYMM」型の日付型(「0401」という型)に変換することはできないのでしょうか? 文字列型には変換はできたのですが、日付型への変換はどうもうまくいかないのです。 そもそも日付型に変換できるかどうかも私にはわからないので、その点も含めてご教授頂けたらと思います。 よろしくお願いします。

  • 文字列を日付に変換

    Excel2003,2010を持っています。 GoogleアナリティクスからCSVデータを出力しましたが、日付のところが下記のような形式で出力されます。 「2011年7月12日火曜日」 これではピボットテーブルでグループ化したり、色々な形で日付を再利用できません。 上記の形の文字列を簡単に日付形式に変換する関数などはあるでしょうか?

  • PHPで指定した日付の1ケ月前表示

    MySQLにある日付を拾ってきて表示しています。 <?php echo $row_target_date['ap_date']; ?> 上記のPHPでは、MySQLのテープルのap_dateカラムにある日付を拾ってきて表示するようにしています。 この1ケ月前を表示したいと考えています。 <?php echo "1月前:" . date("Y/m/d",strtotime("-1 month" ,strtotime("echo $row_target_date['ap_date']"))) . "<BR>"; ?> では表示できませんでした。 表示方法についてご指導いただきたくお願い致します。

    • ベストアンサー
    • PHP
  • VBAでxmlファイルの置換をしたい

    お世話になります。 下記の形で、xmlファイルを置換変換したいと思っております。 ・xmlファイルの置換 ・正規表現で置換 下記のURL等を参考に作成したのですが、変換すると 要素(=全角文字)の箇所が文字化けしてしまいます。 http://grade.upper.jp/wp/pg/257 どのようにすれば、文字化けすることなく、 xmlファイルの中身を正規表現で置換することができるのでしょうか? お手数ですが宜しくお願い致します。

  • PHPのstrtotimeのようなものありますか?

    「2011/08/01(日)」という文字列が現在の時間より過去か未来かの 判断をしたいと思います。 PHPだと、 $yukou_time = strtotime("2011/08/01(日)"); $now_time = time(); if( $yukou_time > $now_time ) という感じでできたのですが、perlの場合、PHPのstrtotimeのような ものを見つけることができません。 お手数ですが、このような機能がありましたらおしえてください。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • PHPの日付スタンプについて

    お世話になっています。 現在CSVでデータベース内のデータを抽出するPHPを作成しているのですが日付の取得で壁に当たっています。 例えば実行日が「2008年1月6日21時55分00秒」とすると「20080106215500」と表示させるために下記のように記述しました。 $CSVDate = date("Ymds", strtotime($Data->regist_date)); しかし結果は「200801062155」で秒数の「s」が表示されません・・・。 「$Data->regist_date」には秒まで含まれているのですがその部分が抽出できず困っています・・・。 何かアドバイスなど頂ければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの文字コード変換について

    PHPで mb_convert_encodingを用いて UTF-8で記述されたPHPスクリプトファイルの PHPファイル内の任意の文字列の文字コードを変換する場合、 $value = "文字列"; $str = mb_convert_encoding($value ,"UTF8","UTF8"); print $str; この場合、特に問題なく、変換がおこなわれます というか、意味のないで処理ではありますが。 次に $str = mb_convert_encoding($value,"EUC-JP","EUC-JP"); とした場合 うまく文字列の文字コードの変換がおこなわれず 出力内容は文字化けします。 次に $str = mb_convert_encoding($value,"SJIS","SJIS"); とした場合 EUC-JPと同じく文字コード変換に失敗し 文字化けするだろうとおもいましたが おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。 これはどういう現象でしょうか? たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として 変換されせるのですから、問題ないはずです。結果問題ありません。 二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして EUC-JPという文字コードに変換しなさいという命令ですよね? これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが 三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。 これはいったいどういう事なのでしょうか? これが仮に $str = mb_convert_encoding($value,"SJIS","UTF-8"); なら話は簡単んです。 UTF-8で記述されたファイルの任意の文字列を UTF8からSJISに変換しようとしているのですから問題なく SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。 こ乃原因をご存知のかたよろしくご教授ください。 お願い致します。

    • ベストアンサー
    • PHP
  • 日付を変換したい

    お世話になります。 ExcelのVBAで作成しております。 処理の過程で、「2012年1月5日(木)」という形の文字列を 取得するのですが、これを、「20120105」という 形に変換したいと思っております。 どのように「VBA」で、「具体的に」コーディングしたらよいか教えて 頂けれないでしょうか? 宜しくお願いします。