5

これがでたらめである場合は申し訳ありません-同様の質問がたくさんありますが、明らかに正確な答えを見つけることができれば、私は尋ねません:)

私は .Net から来ており、PHP の初心者であるため、noob スケールのエラーが発生する可能性があることに注意してください。

たとえば、new DateTime('2014-01-01 13:15:00') を「2014 年 1 月 1 日の水曜日午後 1 時 15 分」(可能 - ローカライズされていない) または「Mercredi 1er」として出力できるようにしたいと考えています。 2014 年 1 月 13 時 15 分 (不可能ですか?)。

基本的に、PHP の「S」日付形式指定子に相当する ISO 形式はないようです。また、strftime 用のものもありませんか?

IntlDateFormatter::FULL は近づいていますが、「1 月 1 日水曜日」または「mercredi 1 janvier」は適切な英語 (またはフランス語) ではありません。必要に応じて、「on」、「the」、および「at」がなくても生活できますが、序数の接尾辞があると便利です。(「1月1日の水曜日」 - 詩の始まりって何?)

PHP.net の strftime セクションのコメントで、この問題に対処している例を 1 つ見ました (これは問題であることを示唆しているようです)。UTC日時、ロケール、タイムゾーンを取り、ローカライズされた文字列を出力する簡単な方法が欲しいです-できれば英語で可能な「適切な」人間が読める形式(上記のように)で。世界中のすべての言語の書式文字列を作成せずに、これを実現したいと考えています。私の Windows 開発ボックスと *nix 製品ボックスで動作する場合もいいでしょう。

<?php
$utcdate = new DateTime('2014-01-01 13:15:00', new DateTimeZone('UTC'));
echo $utcdate->format('l \t\h\e jS \o\f F Y \a\t g:ia') . "<br>";
function dumpDates($date, $locale, $tz){
    $date->setTimeZone(new DateTimeZone($tz));
    $fmt = new IntlDateFormatter( $locale, IntlDateFormatter::FULL, IntlDateFormatter::FULL,
         $tz, IntlDateFormatter::GREGORIAN  );
    echo $fmt->format($date) . "<br>";
    // doesn't work under windows?
    setLocale(LC_TIME, $locale);
    echo strftime('%A, %#d %B %Y %I:%M:%S %p', $date->getTimeStamp()) . "<br>";

}
dumpDates($utcdate, 'en_GB', 'Europe/London');
dumpDates($utcdate, 'de_DE', 'Europe/Berlin');
dumpDates($utcdate, 'fr_FR', 'Europe/Paris');
?>
4

1 に答える 1