PHP strtotime и mktime возвращают разные результаты

Я новичок в мире кодирования, а также в php, и меня смущает, почему функции strtotime и mktime возвращают разные результаты, например.

$endyear = date('Y', strtotime('+5 years')); //returns 2011 - 2015
$endyear = date('Y', mktime(0,0,0,0,0,$year+5)); //returns 2011 - 2014

ИЗМЕНИТЬ

Переменная $year имеет значение $2011.


person PeanutsMonkey    schedule 05.05.2011    source источник


Ответы (1)


Вы используете нули для аргументов месяца и дня, это по сути означает

Day 0 = Last day of the previous month
Month 0 = Last month of the previous year

Все это есть в документации - http://php.net/manual/en/function.mktime.php

person Phil    schedule 05.05.2011
comment
@Фил - Спасибо. Я новичок в PHP, поэтому не знаю, как это влияет на даты. Как первый и последний день дня и месяца влияют на год? - person PeanutsMonkey; 05.05.2011
comment
@Peanuts Подумай об этом. Какой последний день месяца предшествует последнему месяцу года до 2015 года? - person Phil; 05.05.2011
comment
@Phil - Извини, наверное, потому что я нуб. Я не совсем понимаю. Последний день и месяц будут 31 и 12 соответственно. - person PeanutsMonkey; 05.05.2011
comment
@Peanuts Давайте разберемся. Начните с 2015 года. Последний месяц года до 2015 – декабрь 2014 года. Последний день предыдущего месяца – 30 ноября 2014 года. - person Phil; 05.05.2011
comment
@Phil - То есть вы хотите сказать мне, что если у меня 0 в дне и 0 в месяце, это будет равнозначно предположению, что 2015 год - это декабрь 2014 года для месяца и 30 ноября 2014 года, поскольку это последний день перед декабрем? Хорошо, если это так, как мне добавить 5 лет к 2011 году? Я делаю 30, 12, 2011+5? - person PeanutsMonkey; 05.05.2011
comment
@Peanuts Легко, используйте 1 для месяца и дня. Если вы используете PHP 5.3, я бы рекомендовал использовать класс DateTime вместо mktime(). - person Phil; 05.05.2011
comment
@Филс - Спасибо. mktime устарел? - person PeanutsMonkey; 05.05.2011
comment
@Peanuts Нет. Руководство по PHP делает очевидным, что что-то устарело. - person Phil; 05.05.2011
comment
@Phil - извините за мое невежество, но чем DatetIime лучше? - person PeanutsMonkey; 05.05.2011
comment
@Peanuts Интерфейсы для работы с датами, различиями, интервалами и часовыми поясами хорошо определены и просты в использовании. - person Phil; 05.05.2011