0

我有一个简单的函数将月份从数字转换为名称,即 10 到 10 月

function convertToName($month) {  
    $month = date('F', mktime(0, 0, 0, $month));

    return $month;
}

这工作正常,直到时钟似乎倒退了一个小时。我现在又找回了错误的名字。

我尝试使用 date_default_timezone_set 定义时区,但仍然没有。

奇怪的是,如果你传递函数 10,它返回十月,但传递它 11 或 12,它返回十二月,传递 1,一月,2 和 3 返回三月,等等。

我猜一定有一个非常简单的解决方法,但似乎无法在任何地方找到答案,

任何帮助,将不胜感激,

谢谢。

4

3 回答 3

1

尝试通过1天...php.net说一个月的0天实际上是上个月的最后一天

于 2011-10-31T12:52:05.267 回答
1

只需提供任何有效值的日期和年份部分,您就会得到正确的结果:

<?php

function convertToName($month) {  
    $month = date('F', mktime(0, 0, 0, $month, 10, 2010));

    return $month;
}

echo "1: " . convertToName(1) . "<br />";
echo "2: " . convertToName(2) . "<br />";
echo "3: " . convertToName(3) . "<br />";
echo "4: " . convertToName(4) . "<br />";
echo "5: " . convertToName(5) . "<br />";
echo "6: " . convertToName(6) . "<br />";
echo "7: " . convertToName(7) . "<br />";
echo "8: " . convertToName(8) . "<br />";
echo "9: " . convertToName(9) . "<br />";
echo "10: " . convertToName(10) . "<br />";
echo "11: " . convertToName(11) . "<br />";
echo "12: " . convertToName(12) . "<br />";

它产生以下结果:

1: January
2: February
3: March
4: April
5: May
6: June
7: July
8: August
9: September
10: October
11: November
12: December
于 2011-10-31T12:59:13.027 回答
0

正如@OptimusCrime 指出的那样,这是找出月份的一种相当复杂的方法。

我会考虑

/** @desc Converts a month number (1-12) to a name
    @return mixed the month name on success; false on failure 
*/

function convertToName($month) {  

    $months = array ("January", "February", ....); // you get the drift
    return (array_key_exists($month, $months) ? $months["month"] : false);

}

显然,这消除了可能提供的内置国际化date("F"),但我个人喜欢以任何一种方式自行控制 - 您通常不能相信服务器安装了特定的语言环境。

于 2011-10-31T13:26:34.123 回答