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

PHP回荡出3个不同的月份(最后一个显示错误),php,wordpress,Php,Wordpress,根据《今日月刊》的内容,尝试在我的WordPress网站上回复3个月。 1) 这个月 2) 下个月 3) 第三个月 我有一个包含月份名称的数组: $months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'Decemb

根据《今日月刊》的内容,尝试在我的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)日期('m')==12?二,


执行部分,而不是第一个

可能是因为三元运算符的计算不正确。
您也不需要强制转换为整数,因为php会为您这样做

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


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

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

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

您可能希望将函数与函数一起签出:

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

PHP对三元运算符的求值也不同于其他语言,括号负责。谢谢,adding()解决了这个问题!虽然仍然不确定为什么需要它们。因为没有括号,它是
months[((date('m')==11?1:date('m')==12)?2:date('m')+2)-1;
所以它总是返回“2”,因为
date('m')==11?1:date('m')==12
返回true您可以通过
$index=((int)date m')更简单地计算下个月数组索引 % 12)
Formula他不是在重新发明轮子。他的例子是:如果今天是11月,打印出1月,但是如果今天是12月,打印出2月。天知道为什么!这就是我要说的,为什么首先要创建一个月数组如果你能用内置函数实现这一点,那就是为我重新发明!这是为了一个事件ndar,您可以选择显示其他月份的日历。您提供的解决方案似乎非常简单,是否有任何方法可以使月份名称以其他语言显示,而不是英语?对不起,完全是编程初学者。是的,有一种方法:)在此处检查此答案这将导致问题,例如,它将在1月份打印三月y 30。使用“+1个月的第一天”,基本意思是“+1个月,基于本月的第一天”。感谢@janh指出这个“边缘案例”;-)更新了答案。