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

Вопрос:

пытаясь повторить 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 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'));

Ответ №2

Возможно, вы захотите проверить функцию strtotime в сочетании с функцией даты:

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

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

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

Оцените статью
TechArks.Ru
Добавить комментарий