映画のエンドロール観る派?観ない派?

お世話になります。

たびたびの質問で申し訳ありません。

phpで

2014年03月07日を2014年3月7日と言う形に変換させる際に

どのような方法がございますでしょうか。

自分なりに調べてstrtotimeなども考えてみたのですが
日付もおかしく、文字化けをしてしまう状況でした・・。

正規表現などもなかなか理解できないレベルのため、
お手数をおかけしますがご教授いただけましたら幸いです。

A 回答 (2件)

strtotimeは日本語フォーマットに対応していないので、DateTimeを使いましょう。



DateTime::createFromFormat
http://www.php.net/manual/ja/datetime.createfrom …


$text = '2014年03月07日';
$text = DateTime::createFromFormat('Y年m月d日', $text)->format('Y年n月j日');
    • good
    • 0
この回答へのお礼

お忙しい中、ご回答ありがとうございます。

たびたびお手数をおかけして申し訳ありません。

ご教授いただいた方法でやってみたのですが、
shift_jisだからまずいのでしょうか・・・。

年のところでどうしても文字化けしてしまいます。
ですので、

$text = '2014年03月07日';
$text = DateTime::createFromFormat('Y年m月d日', $text)->format('Y/n月j日');
$text = str_replace("/", "年", $text);

と言う形でまわりくどい事をしたのですが、おかしいでしょうか。

他に効率の良い方法がございましたら
お手数をおかけして申し訳ありませんがご指導いただけるようでしたら幸いです。

お礼日時:2014/03/08 04:13

そもそもUTF-8以外でPHPスクリプトを書いている時点でちょっと…普通はUTF-8で書きますね。

UTF-8以外だと以下のような弊害が起こります。このメソッドでもstr_replace関数同様です。

Qiita - 【PHP入門講座】 文字列 #UTF-8だけが正しく扱われる理由
http://qiita.com/mpyw/items/d61b50d90e84e289e2be …


【解決策】

1. UTF-8を使う

これが最良の選択肢です。以下を参考にどうぞ。

Qiita - 【PHP入門講座】 PHPを使うための準備 #テキストエディタの導入
http://qiita.com/mpyw/items/4508dc677b11e487effc …

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);
    • good
    • 0
この回答へのお礼

お忙しい中、重ね重ねご教授いただきましてありがとうございます。

csvの文字コードがshift_jisになっておりまして、
処理の所で文字化けをしてしまうのが面倒に思ってしまいまして
phpをshift_jisで書いておりました。

csvの文字コードをphp内でutf-8に変換しますと
なぜか文字化けがところどころに発生してしまい
無知なところで上手くいきませんでしたのでphp側をshift_jisで書いておりました。

ご教授いただきました正規表現の方で対応させていただきます。
こちらの意味も勉強します。ありがとうございます。

何度もお時間を割いていただき本当にありがとうございました。

お礼日時:2014/03/08 06:39

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