WordPress — PHP повторяет 3 разных месяца (последний показывает неправильно)

пытаясь отобразить 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

часть выполнена, а не первая.

2

Решение

Вероятно, потому что ваш троичный оператор оценивает неправильно.
Вам также не нужно приводить к целому числу, потому что php сделает это за вас.

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

Выходы: январь.

Видишь изменения, которые я сделал? Я добавил () вокруг date('m') == 12 ? 2 : date('m') + 2

1

Другие решения

Проще всего сделать это с помощью встроенных в PHP функций даты, я имею в виду, зачем изобретать велосипед?

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

Вы можете проверить StrToTime функция в сочетании с Дата функция:

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

Если вы хотите локализовать названия месяцев, вы можете изменить первый date-параметр для n который дает вам числовое представление месяца, а затем может быть ключом к вашему массиву.

Это может быть более простым и понятным решением вашей проблемы.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector