[PHP]strftimeの曜日表示(%a)はEUC_JP環境だと動かない

PHP5.4だとちゃんと動いてくれませんでした。
<?php
setlocale(LC_TIME, 'ja_JP.EUC-JP');
var_dump(strftime('%a'));

setlocale(LC_TIME, 'EUC-JP');
var_dump(strftime('%a'));

setlocale(LC_TIME, 'ja');
var_dump(strftime('%a'));
出力
% php a.php
string(3) "火"
string(3) "火"
string(3) "火"
出力はすべてUTF-8の曜日になってしまいます。

(ちなみにPHP5.1ではちゃんとEUC-JPの曜日が出力されました。どこかのバージョンで挙動が変わってしまったようです。)

対処法

EUC-JPな環境で曜日を表示したい場合は、下記のように配列を使ってやった方がよさそうです。
    /**
     * タイムスタンプを曜日(漢字1文字)に変換する
     *
     * @param  int  $timestamp  Unixエポックタイム
     * @reurn  string  '月' or '火' ..
     */
   function getWeekJP($timestamp)
   {
       $week = array("日", "月", "火", "水", "木", "金", "土");
       return $week[date("w", $timestamp)];
   }

   echo getWeekJP(time());
カテゴリ:

人気記事