о! фичу обнаружил
strtotime('first day of')-345600;
даст дату не с 00:00 а current time (текущее время) то-есть если человек смотрит 23:50 то это уже фактически следующий день
в 4 и 5 тоже можно задать время
4. strtotime(date("Y-m 14:00").' -5 days'); // Это тоже достаточно наглядно
5. strtotime(date("Y-m 14:00"))-5*86400;
A
mktime(0, 0, 0, idate('m'), -3, idate('y')
idate('m') = 1
idate('y') = 17
0 = 31.12.16
-1 = 30.12.16
-2 = 29.12.16
-3 = 28.12.16
B
date('Y-m').' -4 days');
date('Y-m') === date('Y-m', time()) === "2017-01" === "2017-01-01" -> 2017-01-01 - 4 дня
31.12 -> 30.12 -> 29.12 -> 28.12;
найдите одно отличие?
"У вас образование какое?"
Московский Институт Радиотехники Электроники Автоматики, Прикладное программирование. вот только непонятно нахера это надо, если я институт закончил 12 лет назад
я так понимаю, что товарищ вбил себе в голову, что считать надо 4 дня от последнего дня предыдущего месяца.
Открою страшную тайну. За предыдущим месяцем идет следующий, то-есть если вы отсчитаете 5 дней от 31.12.2016 и 6 дней от 01.01.17, это будет одно и то-же число!!!
Это страшная тайна, но поверьте, вы рано или поздно привыкните к таким поразительным открытиям!
То-же самое касается и любого другого месяца в году.
вместо того, чтобы в лоб искать последний день месяца, достаточно взять первый день следующего и вычесть единицу.
ну я рад за ваш календарь.
Вы мне ответьте, чем результат работы моей функции отличается от вашей?
а в чем?
mktime(0, 0, 0, idate('m'), -4, idate('y'));
и
strtotime(date("Y-m").' -5 days');
найдите 1 отличие в результате?
miltorg, Послушайте. функции strtotime глубоко пофих какой месяц, текущий, предыдущий или следующий.
Какую дату вы в нее запихнете, такую он и распарсит.
Идеальный вариант пихать в нее дату в формате ISO 8601 тогда она парсит документ несколько быстрее, но в принципе будут работать любые более-менее человекопонятные форматы, вроде тех, что я написал.
т.о.
echo date('r',mktime(0, 0, 0, idate('m'), -4, idate('y')));иecho date('r',strtotime(date("Y-m").' -5 days'));
дадут одинаковый результат
-5 связано с другим алгоритмом пересчета дней. т.к у mktime последний день предыдущего месяца это ноль,
если надо отматать 4 месяца назад то echo date('r',strtotime(date("Y-m").' -4 months'));
добавлю.
strtotime поддерживает и полее изощренные издевательства
например
echo date('r',strtotime(date('Y-m-d').' -2 months -25 days'));
вернет Sat, 05 Nov 2016 00:00:00 +0300
Вот красивый и простой ответ на вашу задачу без из*бств
Fri, 26 Feb 2016 00:00:00 +0300
Sat, 25 Feb 2017 00:00:00 +0300
хотите со временем?
не вопрос
Fri, 26 Feb 2016 14:48:00 +0300
Sat, 25 Feb 2017 14:48:00 +0300
хотите на будущее?
Sat, 05 Mar 2016 14:48:00 +0300
Sun, 05 Mar 2017 14:48:00 +0300
читаем
так текущий день или произвольный день от которого надо отсчитать 4 дня назад?
вы это, уж задание-то сформулируйте по-русски, а не в формате "это я тут гранями мерцаю"
при одном условии, чтобы получить последние 4 дня января вам в переменной надо указывать февраль, а не январь