一人で大騒ぎして申し訳ありません.解決したようです.
和田さんの意見を理解して,応用させていただいた結果,以下のコードで正しいはずです.
昨日は$formatnodayの変換を行なっていなかったため,どうしてもうまく行かなかったのですが,今朝,頭をクリアにして行なったところ解決しました.
moodle_setlocale()あたりを疑ったりと,色々寄り道しましたが,これで大丈夫でしょう.
moodle1.8のmoodle/lib/moodlelib.phpのuserdate()関数です.
function userdate($date, $format='', $timezone=99, $fixday = true) {
global $CFG;
if (empty($format)) {
$format = get_string('strftimedaydatetime');
}
if (!empty($CFG->nofixday)) { // Config.php can force %d not to be fixed.
$fixday = false;
} else if ($fixday) {
$formatnoday = str_replace('%d', 'DD', $format);
$fixday = ($formatnoday != $format);
}
$localewincharset = null;
$textlib = null;
if ($CFG->ostype == 'WINDOWS') {
if ($localewincharset = get_string('localewincharset')) {
$textlib = textlib_get_instance();
$format = $textlib->convert($format, current_charset(), $localewincharset);
$formatnoday = $textlib->convert($formatnoday, current_charset(), $localwincharset);
}
}
$date += dst_offset_on($date);
$timezone = get_user_timezone_offset($timezone);
if (abs($timezone) > 13) { /// Server time
if ($fixday) {
$datestring = strftime($formatnoday, $date);
$daystring = str_replace(' 0', '', strftime(' %d', $date));
$datestring = str_replace('DD', $daystring, $datestring);
} else {
$datestring = strftime($format, $date);
}
} else {
$date += (int)($timezone * 3600);
if ($fixday) {
$datestring = gmstrftime($formatnoday, $date);
$daystring = str_replace(' 0', '', gmstrftime(' %d', $date));
$datestring = str_replace('DD', $daystring, $datestring);
} else {
$datestring = gmstrftime($format, $date);
}
}
/// If we are running under Windows convert from windows encoding to UTF-8/// (because it's impossible to specify UTF-8 to fetch locale info in Win32)
if ($CFG->ostype == 'WINDOWS') {
// if ($localewincharset = get_string('localewincharset')) {
if ($localewincharset) {
// $textlib = textlib_get_instance();
// $datestring = $textlib->convert($datestring, $localewincharset, 'utf-8');
$datestring = $textlib->convert($datestring, $localewincharset, current_charset());
}
}
return $datestring;
}