ローカライズされた曜日名のリスト( 'Monday'、 'Tuesday' ...など)をフォームに表示する必要があります。私はどの日の昼の名前を取得するためにホを知っています。しかし、配列内のすべての曜日名を取得するための特別な、そして失敗しない方法があります。PHPで曜日名を取得する
編集:翻訳ファイルに日の名前を追加することはできますが、それは維持するのが難しいです。
ローカライズされた曜日名のリスト( 'Monday'、 'Tuesday' ...など)をフォームに表示する必要があります。私はどの日の昼の名前を取得するためにホを知っています。しかし、配列内のすべての曜日名を取得するための特別な、そして失敗しない方法があります。PHPで曜日名を取得する
編集:翻訳ファイルに日の名前を追加することはできますが、それは維持するのが難しいです。
setlocale()
と組み合わせてstrftime()
を使用することはオプションです。
しかし、スレッドごとのPHPではなく、プロセスごとにロケール情報が保持されるため、setlocale()
は予期しない動作をする可能性があることに注意してください。そのため、正確なロケールを使用するためには、strftime()
を呼び出す前に毎回setlocale()
に電話することが重要です。
また、Windowsシステムの場合、のパラメータには、setlocale()
の文字列を使用する必要があります。
これらの問題の詳細については、ドキュメントを参照してください。
このような何かが動作するはず:
// define the locales for setlocale() for which we need the daynames
$locales = array(
'en_EN',
'de_DE',
'nl_NL'
// etc...
);
// be aware that setlocale() needs different values on Windows machines
// see the docs on setlocale() for more information
$locales = array(
'english',
'german',
'dutch'
// etc...
);
// let's remember the current local setting
$oldLocale = setlocale(LC_TIME, '0');
// initialize out result array
$localizedWeekdays = array();
// loop each locale
foreach($locales as $locale)
{
// create sub result array for this locale
$localizedWeekdays[ $locale ] = array();
// 7 days in a week
for($i = 0; $i < 7; $i++)
{
// set the locale on each iteration again
setlocale(LC_TIME, $locale);
// combine strftime() with the nifty strtotime()
$localizedWeekdays[ $locale ][] = strftime('%A', strtotime('next Monday +' . $i . ' days'));
// reset the locale for other threads, as a courtesy
setlocale(LC_TIME, $oldLocale);
}
}
// there is your result in a multi-dimensional array
var_dump($localizedWeekdays);
$dayNames = array(
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
);
かなり失敗プルーフです:)
より深刻なノートで、PHPBBの同類は、ローカライズファイルと異なる言語のためのハードコーディングを定義することによってこれを行います。これを本当に確実に行う唯一の方法です。
私はそのようなものをダウンロードし、そのコードがどのように行われているかを見ることをお勧めします。
$date = '2011/10/14';
$day = date('l', strtotime($date));
echo $day;
あなたの良いと簡単な答えをありがとう+1 –
それは突然仕事の後に動作していないと私は、Apacheを停止しました!これで曜日名の代わりに番号が返されます... – KeepMove
setlocale(LC_TIME, 'de_DE');
$today = (86400 * (date("N")));
for($i = 0; $i < 7; $i++) {
$days[] = strftime('%A', time() - $today + ($i*86400));
}
print_r($days);
明らかに時間を(呼び出していないことによって最適化することができる)の7倍などが、それは要点です。ロケールに適した言語を提供し、配列のSun-Sat順序を維持します。
私はそのは久しぶり知っているが、何について:
$timestamp = strtotime('next Sunday');
$days = array();
for ($i = 0; $i < 7; $i++) {
$days[] = strftime('%A', $timestamp);
$timestamp = strtotime('+1 day', $timestamp);
}
このソリューションと承認されたソリューションとの間に違いはありません。 –
からこのコードはかなりうまく動作します: -
$dayNames = array(
0=>'Sunday',
1=>'Monday',
2=>'Tuesday',
3=>'Wednesday',
4=>'Thursday',
5=>'Friday',
6=>'Saturday',
);
は今、たとえば、あなたがarrayから任意の日を取得したい: -
echo $dayNames[1]; //Output:- Monday
「通常」の方法は、与えられたlast day
で始まり、各反復での一日をカウントアップすることです。
for ($i = 0; $i < 7; $i++) {
$weekDayNames[] = strftime("%a", strtotime("last sunday +$i day"));
}
デイ名? '月曜日、火曜日、水曜日などのような意味ですか? ' – LouwHopley
自分で定義してみませんか? 'date()'を要求するのは、信頼性の低いロケール設定に依存するため、通常は最善の方法です。 –
*(参考)* http://www.php.net/manual/en/intldateformatter.format。php – Gordon