Intereting Posts
PHP читает подкаталоги и просматривает файлы как? Как запустить shortcode перед загрузкой header.php в wordpress? Просмотр и отладка подготовленного PDO-запроса без просмотра журналов MySQL Массив Cookie для недавно просмотренных – необходимо извлечь данные из массива и кепки cookie в 5 идентификаторов Получить базовый url в приложении консоли YII Предотвращение кэширования файлов CSS Каковы некоторые хорошие ресурсы, которые помогут мне внедрить поддержку Kerberos A & A в PHP? Отправка SMS-команд AT на 3G-модем с использованием PHP Как я могу использовать регулярное выражение для решения этой проблемы? Как отобразить список лет, упорядоченный по столетию PHP-функция для замены тега HTML (например, мета-описание) с использованием preg_replace функция работает в цикле foreach mysql + php извлекает листовые дети с помощью пути как я могу получить все опции в нескольких вариантах, используя PHP? Почему дата PHP ('m', strtotime ('- 1 months')) не работает корректно на сегодняшний день? 07/31

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

Поскольку текущий месяц / год – январь 2012 года, почему следующий код возвращается в декабре 2011 года, а не в ноябре 2011 года?

echo date("FY", strtotime("-2 months")); 

Это на PHP 5.3.0, если это имеет значение.

Чтобы получить то, что вы ищете, вы можете использовать эту довольно многословную версию:

 echo date("FY", strtotime("first day of this month - 2 months")); 

Проблема с вашей оригинальной версией подробно описана здесь: http://derickrethans.nl/obtaining-the-next-month-in-php.html . Цитируется ниже:

Снова и снова PHP-пользователи жалуются, что в следующем месяце в PHP-синтаксическом анализаторе даты не идет в следующий месяц, но вместо этого переходит к следующему в следующий месяц; как в следующем примере:

 <?php $d = new DateTime( '2010-01-31' ); $d->modify( 'next month' ); echo $d->format( 'F' ), "\n"; ?> 

Выход маленького скрипта будет в марте. Март явно не следует за январем, поскольку февраль находится между ними. Однако текущее поведение является правильным. Внутри происходит следующее:

в следующем месяце число месяца (первоначально 1) увеличивается на единицу. Это делает дату 2010-02-31. Второй месяц (февраль) имеет только 28 дней в 2010 году, поэтому PHP автоматически корректирует это, просто продолжая считать дни с 1 февраля. Затем вы закончите 3 марта. Формат форматирования отключается год и день, в результате чего появляется марка. Это легко увидеть при повторении даты с полным форматом даты, который выйдет 3 марта 2010 года:

Это для добавления месяцев, но то же самое применяется в обратном порядке при вычитании месяцев; 31 ноября не было, поэтому метод strtotime «исправляет» его до 1 декабря.