2015-07-15 1 views
0

Я обнаружил, что strtotime ведет себя странно при использовании относительного формата времени.PHP strtotime относительный формат времени получил ошибку (или функцию?)

Предположим, сегодня 31 марта 2015 (сделано настройки часов системы), когда я использую strtotime('-1 month'), она возвращает 3 марта 2015.

Предположим, сегодня 31 июля 2015, когда я использую strtotime('-1 month'), она возвращает 1 июля 2015 года, когда он вернется 31 июля 2015 года, если сегодня 31 августа 2015 года.

Итак, кажется, что PHP просто вычитает 1 месяц и добавляет дату обратно, если в этом месяце нет 31-го дня (или 30-е место & 29 февраля). Это ошибка PHP? Или есть причина, почему PHP делает это таким образом как функция?

И что самое главное, независимо от того, является ли это ошибкой или функцией, есть ли способ заставить его всегда возвращать последний день при расчете времени? (будет время в 3 месяца или другое количество месяцев, поэтому «последний день последнего месяца» не совсем нормально)

+1

Начать с определения того, что именно означает «-1 месяц» на 31-й. Это такое очень странное определение, что я никогда не ожидал, что какое-либо программное обеспечение «начнет правильно». – deceze

ответ

0

Что-то вроде этого?

<?php 
$d = new DateTime('2010-01-08'); 
$d->modify('+1 month'); 
$d->modify('last day of this month'); 
echo $d->format('d-M-Y'), "\n"; 
?> 
+0

Что делать, если это -1 месяц? Это просто ничего не сделает, если $ d = new DateTime ('2010-03-01'); – cytsunny

+0

Не уверен, что вы имеете в виду. Просто отредактируйте дату: 2010-03-01, как вы сказали, и измените ее на «-1 месяц». Ожидается выход. –

+0

ops, извините, проблема должна произойти в 2010-03-31. – cytsunny