4 день для произвольного прошлого месяца с конца

1 234
[Удален]
#21
silicoid:
при одном условии, чтобы получить последние 4 дня января вам в переменной надо указывать февраль, а не январь

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

---------- Добавлено 30.01.2017 в 15:20 ----------

danforth:
time.Now().AddDate(0, 0, -4)

28 символов. Наглядно?

А это какой язык? В задании - php

S
На сайте с 13.10.2014
Offline
171
#22
miltorg:
Переменная - текущая дата. См. исходное Задание

читаем

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

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

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

[Удален]
#23
silicoid:
читаем

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

Есть календарь на текущий произвольный месяц. Он должен показывать и 4 дня до, и 4 дня после.

S
На сайте с 13.10.2014
Offline
171
#24

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


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

[Удален]
#25
silicoid:
Вот красивый и простой ответ на вашу задачу без из*бств

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

Месяц должен быть произвольный. текущий, но произвольный. Например сегодня - январь, а завтра, например февраль. Прошлые месяцы не нужны.

Будущие - нужны все. На все месяца. Это меняющийся календарь на текущий месяц. Месяца меняются в зависимости от наступившей даты

---------- Добавлено 30.01.2017 в 16:32 ----------

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


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

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

4 дня после текущего МЕСЯЦА. Не дня. А месяца

---------- Добавлено 30.01.2017 в 16:42 ----------

webjey:

strtotime('-4 days',strtotime('last day of previous month'));

Кстати. наглядно - очень наглядно.

S
На сайте с 13.10.2014
Offline
171
#26

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

[Удален]
#27
silicoid:
miltorg,
блин. что-то я совсем запутался уже с этими задачами
echo date('r',mktime(0, 0, 0, idate('m'), -4, idate('y')));
дает вообще какого-то сфероконя
Tue, 27 Dec 2016 00:00:00 +0300

Сегодня Январь. Прошлый месяц - Декабрь

31 декабря - 1 день прошлого месяца с конца

30 - 2 день

29 - 3 день

28 - 4 день

Что не так?

---------- Добавлено 30.01.2017 в 17:41 ----------

miltorg:
Сегодня Январь. Прошлый месяц - Декабрь
31 декабря - 1 день прошлого месяца с конца
30 - 2 день
29 - 3 день
28 - 4 день

Что не так?

Возможно что вы хотите 28. Пожалуйста:

echo date('r',mktime(0, 0, 0, idate('m'), -3, idate('y')));

Смысл не в этом.

S
На сайте с 13.10.2014
Offline
171
#28

а в чем?

mktime(0, 0, 0, idate('m'), -4, idate('y'));

и

strtotime(date("Y-m").' -5 days');

найдите 1 отличие в результате?

[Удален]
#29

А смысл вот в таком календаре занятости:

jpg Clipboard01.jpg
S
На сайте с 13.10.2014
Offline
171
#30

ну я рад за ваш календарь.

Вы мне ответьте, чем результат работы моей функции отличается от вашей?

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий