Существуют небольшие различия в зависимости от того, говорите ли вы о «примитивах» или «типах объектов»; то же самое можно сказать, если вы говорите о «статических» или «нестатических» членах; вы можете также смешать все вышеперечисленное ...
Вот пример (вы можете запустить его):
public final class MyEqualityTest
{
public static void main( String args[] )
{
String s1 = new String( "Test" );
String s2 = new String( "Test" );
System.out.println( "\n1 - PRIMITIVES ");
System.out.println( s1 == s2 ); // false
System.out.println( s1.equals( s2 )); // true
A a1 = new A();
A a2 = new A();
System.out.println( "\n2 - OBJECT TYPES / STATIC VARIABLE" );
System.out.println( a1 == a2 ); // false
System.out.println( a1.s == a2.s ); // true
System.out.println( a1.s.equals( a2.s ) ); // true
B b1 = new B();
B b2 = new B();
System.out.println( "\n3 - OBJECT TYPES / NON-STATIC VARIABLE" );
System.out.println( b1 == b2 ); // false
System.out.println( b1.getS() == b2.getS() ); // false
System.out.println( b1.getS().equals( b2.getS() ) ); // true
}
}
final class A
{
// static
public static String s;
A()
{
this.s = new String( "aTest" );
}
}
final class B
{
private String s;
B()
{
this.s = new String( "aTest" );
}
public String getS()
{
return s;
}
}
Вы можете сравнить объяснения для «==» (Equality Оператор) и ".equals (...)" (метод в классе java.lang.Object) через эти ссылки:
Вам не хватает второго аргумента для второго вызова strtotime()
:
echo date('d/m/Y', strtotime('+2 months'));
Использование DateTime-> add () или DateTime-> modify ()
Если вы работаете с существующим объектом DateTime, вы можете используйте один из них:
// Your date
$date = new DateTime(); // empty for now or pass any date string as param
// Adding
$date->add(new DateInterval('P2M')); // where P2M means "plus 2 months"
// or even easier
$date->modify('+2 months');
// Checking
echo $date->format('Y-m-d');
Опасайтесь добавления месяцев в PHP, он может переполняться до следующего месяца, если день в исходной дате превышает общее количество дней в новом месяце. То же переполнение происходит с високосными годами при добавлении лет. Как-то это не считается ошибкой разработчиков PHP и просто документируется без решения. Подробнее здесь: PHP DateTime :: изменить добавление и вычитание месяцев
Я нашел, что это самое точечное решение для решения проблемы переполнения:
$day = $date->format('j');
$date->modify('first day of +2 months')->modify('+'. (min($day, $date->format('t')) - 1) .' days');
Если сегодня «ГГГГ-мм-31», а в следующем месяце не будет 31-го дня, он отобразит следующий месяц этого дня, чтобы система отображала результат «+3 месяца» вместо «+2 месяца», результат.
Итак, я думаю, что это самая безопасная ситуация:
$end_date=date("Y-m-d",strtotime("+2 month",strtotime(date("Y-m-01",strtotime("now") ) )));
Сначала измените дату на первый день.
Попробуйте использовать объект DateTime :
$date = new DateTime("+2 months");
echo $date->format("d/m/Y");
DateTime
, когда у вас уже есть strtotime
, и это нормально, просто исправить опечатку, как в принятом ответе.
– Stanislav Shabalin
10 August 2017 в 14:54