PHP呼出3个不同月份(最后一个显示错误)

时间:2017-11-03 09:16:49

标签: php wordpress

根据今天的月份,试图回到我的WordPress网站3个月。 1)这个月 2)下个月 3)第三个月。

我有一个包含月份名称的数组:

$months = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December'
];

打印当月:

<?php echo $months[(int)date('m')-1]; ?>

要在下个月打印出来:

<?php echo $months[((int)date('m') == 12 ? 1 : (int)date('m') + 1)-1]; ?>

两者如果这些工作都很好。但是当我试图打印出第三个月而不是一月份时,我得到二月份。你能帮我找出原因吗?

<?php echo $months[((int)date('m') == 11 ? 1 : (int)date('m') == 12 ? 2 : (int)date('m') + 2)-1]; ?>

我得到答案0,所以它应该是1月,但似乎

  

(int)date(&#39; m&#39;)== 12? 2

部分被执行,而不是第一个。

3 个答案:

答案 0 :(得分:1)

可能因为您的三元运算符评估错误 你也不需要强制转换为整数,因为php会为你做这件事。

echo $months[(date('m') == 11 ? 1 : (date('m') == 12 ? 2 : date('m') + 2))-1];

输出:1月。

看到我做的改变?我在date('m') == 12 ? 2 : date('m') + 2附近添加了()

答案 1 :(得分:1)

最简单的方法是使用PHP内置日期函数来实现这一点,我的意思是为什么要重新发明轮子?

$now = date('Y-m-1');
echo date('m');
echo date('m', strtotime($now . ' + 1 month'));
echo date('m', strtotime($now. ' + 2 month'));

答案 2 :(得分:1)

您可能希望结合strtotime功能查看date功能:

<?php
echo date("F", strtotime("first day of +1 month"));

如果要本地化月份名称,可以将第一个date - 参数更改为n,这样可以为您提供月份的数字表示,然后可以成为数组的键。< / p>

对于您的问题,这可能是一种更简单,更易读的解决方案。