2011-10-14 13 views
10

ローカライズされた曜日名のリスト( 'Monday'、 'Tuesday' ...など)をフォームに表示する必要があります。私はどの日の昼の名前を取得するためにホを知っています。しかし、配列内のすべての曜日名を取得するための特別な、そして失敗しない方法があります。PHPで曜日名を取得する

編集:翻訳ファイルに日の名前を追加することはできますが、それは維持するのが難しいです。

+0

デイ名? '月曜日、火曜日、水曜日などのような意味ですか? ' – LouwHopley

+2

自分で定義してみませんか? 'date()'を要求するのは、信頼性の低いロケール設定に依存するため、通常は最善の方法です。 –

+2

*(参考)* http://www.php.net/manual/en/intldateformatter.format。php – Gordon

答えて

13

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); 
3
$dayNames = array(
    'Sunday', 
    'Monday', 
    'Tuesday', 
    'Wednesday', 
    'Thursday', 
    'Friday', 
    'Saturday', 
); 

かなり失敗プルーフです:)

より深刻なノートで、PHPBBの同類は、ローカライズファイルと異なる言語のためのハードコーディングを定義することによってこれを行います。これを本当に確実に行う唯一の方法です。

私はそのようなものをダウンロードし、そのコードがどのように行われているかを見ることをお勧めします。

http://www.phpbb.com/downloads/olympus.php

+2

すべての言語と私は悲しいパンダになります。 –

+1

-1 OPはローカライズされた名前を求めました。 –

+3

彼らは私のためにローカライズされています:) – vascowhite

32
$date = '2011/10/14'; 
$day = date('l', strtotime($date)); 
echo $day; 
+0

あなたの良いと簡単な答えをありがとう+1 –

+0

それは突然仕事の後に動作していないと私は、Apacheを停止しました!これで曜日名の代わりに番号が返されます... – KeepMove

0
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順序を維持します。

0

私はそのは久しぶり知っているが、何について:

$timestamp = strtotime('next Sunday'); 
$days = array(); 
for ($i = 0; $i < 7; $i++) { 
$days[] = strftime('%A', $timestamp); 
$timestamp = strtotime('+1 day', $timestamp); 
} 

how to create array of a week days name in php

+0

このソリューションと承認されたソリューションとの間に違いはありません。 –

-2

からこのコードはかなりうまく動作します: -

$dayNames = array(
    0=>'Sunday', 
    1=>'Monday', 
    2=>'Tuesday', 
    3=>'Wednesday', 
    4=>'Thursday', 
    5=>'Friday', 
    6=>'Saturday', 
); 

は今、たとえば、あなたがarrayから任意の日を取得したい: -

echo $dayNames[1]; //Output:- Monday 
2

「通常」の方法は、与えられたlast dayで始まり、各反復での一日をカウントアップすることです。

for ($i = 0; $i < 7; $i++) { 
    $weekDayNames[] = strftime("%a", strtotime("last sunday +$i day")); 
} 
関連する問題