silicoid

Рейтинг
171
Регистрация
13.10.2014

о! фичу обнаружил

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

Вот красивый и простой ответ на вашу задачу без из*бств


print date('r',strtotime('03/01/2016 -4 days'));
print date('r',strtotime('03/01/2017 -4 days'));

Fri, 26 Feb 2016 00:00:00 +0300

Sat, 25 Feb 2017 00:00:00 +0300

хотите со временем?

не вопрос


print date('r',strtotime('03/01/2016 14:48 -4 days'));
print date('r',strtotime('03/01/2017 14:48 -4 days'));

Fri, 26 Feb 2016 14:48:00 +0300

Sat, 25 Feb 2017 14:48:00 +0300

хотите на будущее?


print date('r',strtotime('03/01/2016 14:48 +4 days'));
print date('r',strtotime('03/01/2017 14:48 +4 days'));

Sat, 05 Mar 2016 14:48:00 +0300

Sun, 05 Mar 2017 14:48:00 +0300

miltorg:
Переменная - текущая дата. См. исходное Задание

читаем

miltorg:
4 день для прошлого месяца с конца, на php для произвольной текущей даты

так текущий день или произвольный день от которого надо отсчитать 4 дня назад?

вы это, уж задание-то сформулируйте по-русски, а не в формате "это я тут гранями мерцаю"

miltorg:
Моё красивей.

при одном условии, чтобы получить последние 4 дня января вам в переменной надо указывать февраль, а не январь

Всего: 1685