2012-05-14 2 views
8

Я написал этот кусок кода, чтобы отобразить текущую дату + 2 месяца:текущая дата + 2 месяца

<?php 
    $date = date("d/m/Y"); 
    $date = strtotime(date("d/m/Y", strtotime($date)) . "+2 months"); 
    $date = date("d/m/Y",$date); 
    echo $date; 
?> 

Это, кажется, не работает, как это показывает: 01/03/1970.

Что я делаю неправильно?

Благодарим за помощь.

EDIT:

После прочтения комментариев и ответов, я упростил и исправить ее.

<?php 
    $date = date("d/m/Y", strtotime(" +2 months")); 
    echo $date; 
?> 
+0

Попробуйте положить пространство перед вашим '+ 2'. И, возможно, использовать две переменные - с использованием одного и того же имени переменной много раз для разных типов данных - запутанная и плохая практика. – Crontab

+0

Правильная проверка возвращаемого значения также помогает. – hakre

ответ

21

Вы пропустили второй аргумент для второго strtotime() вызова:

echo date('d/m/Y', strtotime('+2 months')); 
+1

Будьте особенно осторожны при использовании строя. 31 июля дата («dmY») дает «31072014», а дата («dmY», время выполнения («- 1 месяц»)) дает «01072014» (я ожидал «30062014»). – AaL

3

Попробуйте использовать DateTime object:

$date = new DateTime("+2 months"); 
echo $date->format("d/m/Y"); 
+1

Правильно, но не относится к делу. –

+0

Почему этот ответ не имеет значения? Просто любопытный @StanislavShabalin –

+0

@MuhammadIbnuh Честно говоря, я не могу вспомнить или понять это через пять лет :-) Может быть, потому, что зачем использовать 'DateTime', когда у вас уже есть' strtotime', и это нормально, просто исправить опечатку как в принятом ответе. –

1

Если сегодня является "YYYY-MM-31" и в следующем месяце не будет 31-го дня, покажет следующий месяц этого дня, чтобы система отображала результат «+3 месяца» вместо результата «+2 месяца».

Так что я предполагаю, что это самый безопасный:

$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now"))))); 

Изменить дату на 1-й день первого.

Смежные вопросы