пытаясь отобразить 3 месяца на моем сайте WordPress в соответствии с текущим месяцем.
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, так что это должен быть январь, но кажется, что
(int) date (‘m’) == 12? 2
часть выполнена, а не первая.
Вероятно, потому что ваш троичный оператор оценивает неправильно.
Вам также не нужно приводить к целому числу, потому что php сделает это за вас.
echo $months[(date('m') == 11 ? 1 : (date('m') == 12 ? 2 : date('m') + 2))-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'));
Вы можете проверить StrToTime функция в сочетании с Дата функция:
<?php
echo date("F", strtotime("first day of +1 month"));
Если вы хотите локализовать названия месяцев, вы можете изменить первый date
-параметр для n
который дает вам числовое представление месяца, а затем может быть ключом к вашему массиву.
Это может быть более простым и понятным решением вашей проблемы.