2011-08-07 76 views
13

我有一個包含月份編號的變量。我怎樣才能從這個值得到這個月的名字?如何從PHP中的數字中獲取月份名稱?

我知道我可以爲$month_num => $month_name定義一個數組,但我想知道在PHP中是否有時間函數可以做到這一點,而不需要數組?

+0

['date'(http://php.net/manual/en/function.date.php)是不夠好? – Nemoden

回答

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

雖然這是正確的答案,但應該解釋發生了什麼事情。 – Kayla

+0

請參閱下面的[我的回答](http://stackoverflow.com/a/24596827/1563422),稍微簡短一點。 –

14

你可以只用Fdate()格式字符一個Unix時間戳的文本一個月,你可以把最新的幾乎任何格式轉換成Unix的時間戳與strtotime(),所以挑選任何一年和一天1〜28(因此它在所有12個月存在),做:

$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

有關使用strtotime()的好處是,它是非常靈活的。假設你想要一個文本月份名稱數組,每當腳本運行時一個月開始;

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

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

Working example

+0

一個好主意,雖然結果從下個月開始,但可能不是我們期望的標準(Jan,feb等)輸出。 – Ben

2

您還可以使用:

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

這只是另一種方式。與@Dreaded semicolon的回答相比,我對此效率一無所知。

以下是關於ideone的a demo

參考:

  • jdmonthame返回儒略曆月份名稱。

  • gregoriantojd將格里高利(當前使用的)日曆日期轉換爲朱利安(1, 1部分代表白天和年份)。

5

稍短接受答案的版本是:

date('F', strtotime("2000-$monthnumber-01")); 
  • F代表 「月份名稱」,每個桌子上date

  • 2000只是一年的填料,而01是當天的填料;因爲我們不關心月份名稱以外的任何內容。

這裏是關於ideone的a demo

0

使用將日期元素作爲參數的函數mktime。

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

輸出:

相關問題