2016-10-11 4 views
0

Я пытаюсь получить -2 месяца на дате в PHP. В большинстве случаев результат хорош, но для одной даты результат является ложным.PHP DateTime return not exepected result

$d = 1409436000; // 31-8-2014 

$d1 = new DateTime(date("d-m-Y", $d)); 

$d1->modify("-2 month"); 

echo $d1->format("d-m-Y"); 

// expected : 30-06-2014 
// got  : 01-07-2014 

Моя текущая версия РНР: 5.6.23-0 + deb8u1 Я не имею никакого конфигурацию о TimeZone.

Итак: Почему я получил этот результат? Это потому, что август & Июль 31 дней? Или текущая ошибка в phpversion? Часовой пояс?

Спасибо =)

+1

работает для меня .. Я получил 30-06-2014 –

+0

Вы можете попробовать : '$ d = 1409436000; // 31-8-2014 $ d1 = new DateTime(); $ d1-> setTimestamp ($ d); $ d1-> изменить ("- 2 месяца"); echo $ d1-> format ("d-m-Y"); ' –

+0

Я действительно получил' 01-07-2014'. Я запускаю PHP 7. –

ответ

0

Согласно комментариям и ссылкам, я решил мою проблему таким образом:

$d = 1409436000; // 31-8-2014 

$d1 = strtotime("first day of this month", $d); 
$d1 = strtotime("-2 month", $d1); 
$d1 = strtotime("last day of this month", $d1); 

echo date("d-m-Y", $d1); 
  • способ быть уверен, что вы будете иметь правильный результат будет принимать первый день с вашей даты.
  • Сделайте необходимый материал.
  • Получите последний день с текущего месяца.

Проблема была: Я пытаюсь получить «31/08/2012 -2 месяца», ведьма равна «31/06/2014».

31/06/2014 => эта дата не существует, и PHP будет преобразовать это «01/07/2014»