php - 奇怪的行为在For循环中的date()

时间:2014-02-04 11:03:54

标签: php date for-loop

我正在尝试使用date() for循环显示月份缩短名称。但它不想返回所有月份名称,而只是返回Jan的第一个月名称。

    for($d=1; $d<=12; $d++){

    if($d < 10) {
    $s = 0 . $d;
    echo date("M", $s) . '<br/>';
    }

    }

它将返回:

Jan
Jan
Jan
Jan
Jan
Jan
Jan
Jan
Jan
Jan

我不知道为什么变量$d的值如果位于date()函数内,则不会递增。

有人可以在这解释一下为什么会这样吗?

最好的问候

4 个答案:

答案 0 :(得分:1)

Date()要求时间戳作为第二个参数,而不是您提供的“月号”。因此,对于Unix纪元的1-12秒,月份将是1月。

答案 1 :(得分:1)

for($d=1; $d<=12; $d++){
$myDate = mktime(1,1,1,$d,1,2014);
echo date("M", $myDate) . '<br/>';

}

这已经过测试。输出:

扬 二月 损伤 四月 可以 君 七月 八月 九月 十月 十一月 癸

...

基本上,date()函数的第二个参数需要是一个时间戳(以秒为单位)。

mktime()函数将根据您提供的小时/分钟/秒/月/日/年创建时间戳。

http://uk1.php.net/mktime

答案 2 :(得分:1)

如果您想从当前日期打印未来12个月,这将对您有所帮助。

<?php
for ($m=1; $m<=12; $m++) {
    $month = date('F', mktime(0,0,0,$m, 1, date('Y')));
    echo $month. '<br>';
}
?>

您正在做的只是循环当前日12次并在每次迭代中打印相同的日期月份。这就是为什么你得到同一个月。

答案 3 :(得分:0)

for ($m=1; $m<=12; $m++) {
    $month = date('M', strtotime("2014-$m-01"));
    echo $month. '<br>';
}