2011-08-07 6 views
13

Mam zmienną zawierającą numer miesiąca. Jak mogę uzyskać nazwę miesiąca z tej wartości?Jak uzyskać nazwę miesiąca z numeru w PHP?

Wiem, że mógłbym zdefiniować tablicę dla $month_num => $month_name, ale chcę wiedzieć, czy istnieje funkcja czasu w PHP, która może to zrobić, bez potrzeby tablicy?

+0

[ 'dzień spełnienia wymogu] (http://php.net/manual/en/function.date.php) jest wystarczająco dobry? – Nemoden

Odpowiedz

21
date("F",mktime(0,0,0,$monthnumber,1,2011)); 
+5

Chociaż jest to właściwa odpowiedź, powinno być wyjaśnienie tego, co się dzieje. – Kayla

+0

Zobacz [moja odpowiedź] (http://stackoverflow.com/a/24596827/1563422) poniżej, aby uzyskać nieco krótszy sposób robienia tego. –

14

można uzyskać tylko miesiąc tekstową czasowym stempla Unix z charakterem formacie Fdate(), można włączyć niemal każdy format daty na znacznik czasu Uniksa z strtotime(), więc wybrać dowolny rok i jeden dzień 1 do 28 (tak jest obecny we wszystkich 12 miesięcy) i zrobić:

$written_month = date("F", strtotime("2001-$number_month-1")); 

// Example - Note: The year and day are immaterial: 
// 'April' == date("F", strtotime("2001-4-1")); 

Working example

zaletą korzystania strtotime() jest to, że jest bardzo elastyczny. Powiedzmy, że chcesz mieć tablicę tekstowych nazw miesięcy rozpoczynających się miesiąc po uruchomieniu skryptu;

<?php 
for ($number = 1; $number < 13; ++$number) { 

    // strtotime() understands the format "+x months" 
    $array[] = date("F", strtotime("+$number months")); 
} 
?> 

Working example

+0

Doskonały pomysł, chociaż wynik zaczyna się od następnego miesiąca, co może nie być standardowym (styczeń, luty, itp.) Wynikiem, którego oczekujemy .. – Ben

2

Można również użyć:

jdmonthname(gregoriantojd($monthnumber, 1, 1), CAL_MONTH_GREGORIAN_LONG) 

To po prostu inny sposób. Nie wiem nic na temat skuteczności tego w porównaniu z odpowiedzią @Dreaded semicolon.

Oto a demo na idee.

Dla porównania:

  • jdmonthame zwraca nazwę miesiąca kalendarza juliańskiego.

  • gregoriantojd Konwertuje gregoriański (obecnie używany) kalendarz na Julian (część 1, 1 oznacza dzień i rok).

5

Nieco krótsza wersja przyjętego odpowiedź brzmi:

date('F', strtotime("2000-$monthnumber-01")); 
  • F oznacza "nazwy miesiąca", na stole na date.

  • 2000 to tylko wypełniacz do roku, a 01 wypełniacz na dzień; ponieważ nie przejmujemy się niczym innym niż nazwą miesiąca.

Oto a demo na idee.

0

użyj funkcji mktime, która przyjmuje parametry daty jako parametry.

<?php 
$month_number= 3; 
$month_name = date("F", mktime(0, 0, 0, $month_number, 10)); 
echo $month_name; 
?> 

wyjściowa: marca