Добавление лет к дате сбрасывается до 1970-01-01

$somedate = "1980-02-15";
$otherdate = strtotime('+1 year', strtotime($somedate));
echo date('Y-m-d', $otherdate);

выходы

1981-02-15

а также

$somedate = "1980-02-15";
$otherdate = strtotime('+2 year', strtotime($somedate));
echo date('Y-m-d', $otherdate); 

выходы

1982-02-15

но

$somedate = "1980-02-15";
$otherdate = strtotime('+75 year', strtotime($somedate));
echo date('Y-m-d', $otherdate); 

выходы

1970-01-01

Как исправить?

Ответы на вопрос(5)

Решение Вопроса

Ошибка 2038 что походит на 2000, когда системы не могут обрабатывать даты после этого года из-за 32-битных ограничений. ИспользоватьКласс DateTime вместо этого, который работает вокруг этой проблемы.

For PHP 5.3+

$date = new DateTime('1980-02-15');
$date->add(new DateInterval('P75Y'));
echo $date->format('Y-m-d');

For PHP 5.2

$date = new DateTime('1980-02-15');
$date->modify('+75 year');
echo $date->format('Y-m-d');
 07 июн. 2012 г., 04:54
Хорошо, нашел альтернативу для PHP 5.2
 07 июн. 2012 г., 04:52
Ааа. Это требует 5.3. Дай посмотреть, смогу ли я найти пример 5.2.
 07 июн. 2012 г., 04:49
Смотрите мой обновленный ответ
 Zurechtweiser07 июн. 2012 г., 04:44
как добавить 75 лет к заданной строке "1980-02-15" используя класс datetime?
 Zurechtweiser07 июн. 2012 г., 04:51
Благодарю. Я получаю фатальную ошибку: вызов неопределенной функции date_add (). Я использую PHP версии 5.2.17.

поэтому она переполняется, если пытается вычислить годы после 2038 года и возвращается к 1970 году.

Чтобы обойти это, используйте объект DateTime. http://php.net/manual/en/book.datetime.php

Чтобы добавить период времени к объекту DateTime, используйте DateTime :: add, который принимает DateInterval в качестве параметра. http://php.net/manual/en/datetime.add.php http://www.php.net/manual/en/class.dateinterval.php

$date = new DateTime("1980-02-15");
if (method_exists("DateTime", "add")) {
    $date->add(new DateInterval("Y75"));
} else {
    $date->modify("+75 years");
}
echo $date->format("Y-m-d");
 Zurechtweiser07 июн. 2012 г., 04:53
Благодарю. Я получаю фатальную ошибку: вызов неопределенного метода DateTime :: add (). Я использую PHP версии 5.2.17.
 07 июн. 2012 г., 04:55
:: добавить только в 5.3+. Вы захотите вызвать :: modify для него со строковым параметром, аналогичным тому, который вы использовали бы для strtotime.
 07 июн. 2012 г., 04:57
Код в моем ответе теперь будет работать правильно на 5.2 или 5.3+.
 07 июн. 2012 г., 04:47
@Richart Bremer Добавлены ссылки, которые показывают, как это сделать.
 Zurechtweiser07 июн. 2012 г., 04:46
как добавить 75 лет к заданной строке "1980-02-15" используя класс datetime?

ся использовать другой метод для работы с датами.

У PEAR есть класс Date:Груша дата

В 03:14:07 UTC.

Таким образом, вы не можете представлять / управлять временем, которое превышает его, используя метку времени.

75 лет с 1980 года - это 2055 год, что превышает максимальное значение даты, которое может быть представлено в 32-разрядном целом числе. что является датой 1970 года, которую вы наблюдаете.

Ваш ответ на вопрос