PHP date()函数在时钟更改后返回错误的值

时间:2011-10-31 12:47:56

标签: php function date mktime

我有一个简单的功能,可以将一个月从其编号转换为名称,即10到10月

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

    return $month;
}

这工作正常,直到看起来时钟已经过了一个小时。我现在回错了名字。

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

奇怪的是,如果你传递函数10,它将返回10月,但是传递11或12,它将返回12月,传递1,1月,2和3返回3月,依此类推。

我猜测必须有一个非常简单的修复,但似乎无法在任何地方找到答案,

任何帮助将不胜感激,

感谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

答案 2 :(得分: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")可能提供的内置国际化,但我个人喜欢以自己的方式控制它 - 你经常不能相信服务器安装了特定的语言环境。 / p>