Страницы: 1
RSS
Как из года, номера недели и дня в неделе получить дату?
 
Добрый вечер. Вновь обращаюсь к вам за помощью.
Имеются три значения: год, номер недели в этом году и день недели в ней. Нужно в итоге получить конкретную дату по этим значениям. Недели в году и дни в неделе - по ИСО (1-я неделя - с четвергом; 1-й день - понедельник, 7-й - воскресенье)
Желательно в виде формулы.
 
Цитата
Инсайд83 написал: Вновь обращаюсь к вам за помощью.
Обращайтесь - Правила, Приемы, Поиск... ;)
Они вам дадут 1 из 1001 - http://www.planetaexcel.ru/techniques/6/75/
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Z, Спасибо, конечно, за отклик. Но дело в том, что мне не известен месяц - только номер недели. Но за наводку спасибо еще раз. Буду думать.
 
вот попробовал для 15 года
 
Код
=ДАТА(R1C[-2];1;1)+ (ДЕНЬНЕД(ДАТА(R1C[-2];1;1);2)>4)*7-ДЕНЬНЕД(ДАТА(R1C[-2];1;1);2)+(R[-1]C[-2]-1)*7+R[-1]C[-1]
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Vik_tor, по Вашему примеру неудачно считает год, где 1 января выпадает на пятницу-воскресенье. Все равно спасибо Вам.

[USER=8380]Ігор Гончаренко[/USER, то, что нужно! Спасибо огромное!
Изменено: Инсайд83 - 02.03.2017 23:10:32
 
Еще вариант, вроде покороче немного. Сверял по календарю от Ron de Bruin, в котором есть номера недель по разным системам. Помогал его русифицировать, кстати :)
Изменено: ZVI - 02.03.2017 19:46:45
 
Кнопка цитирования не для ответа [МОДЕРАТОР]

Спасибо и Вам! Тоже подходит!
 
Владимир,
Вы б математикой этого метода поделились! Если предыдущие прозрачны, то этот заставляет задуматься.
По вопросам из тем форума, личку не читаю.
 
Инсайд83, кнопка цитирования не для ответа! Зачем целиком сообщение цитируете?  
 
Цитата
БМВ написал: Вы б математикой этого метода поделились!
Попробую объяснить. Исходим из того, что 1-я неделя - это неделя в начале января с четвергом.
Это означает, что 1-й понедельник этой недели всегда в интервале от 29 декабря по 4 января.
Наша формула такая: =ДАТА(A2;1;-2)-ДЕНЬНЕД(ДАТА(A2;1;3))+B2*7+C2-1, алгоритм следующий:

1. Найти дату понедельника "нулевой" недели, от которой начнем отсчет недель:
=ДАТА(Год;1;-2)-ДЕНЬНЕД(ДАТА(Год;1;3)) , где Год = значение ячейки A2
Если к этой дате прибавить 7 дней, то получим понедельник первой недели по ГОСТ ИСО или по функции НОМНЕДЕЛИ.ISO
Функция ДЕНЬНЕД здесь используется без второго аргумента и выдает 2 для понедельника.
Для привычной для нас логики (неделя – с понедельника) можно было бы использовать такой вариант:
=ДАТА(Год;1;-2)-ДЕНЬНЕД(ДАТА(Год;1;4);2), но в исходной формуле без 2-го аргумента формула покороче и число 3 используется вместо 4 с тем же результатом. Теперь разберемся, откуда взялось -2.
Понедельник 1-й недели (он перед 5 января текущего года) можно вычислить так:
=ДАТА(Год;1;5)-ДЕНЬНЕД(ДАТА(Год;1;3))
Этот понедельник может оказаться как в текущем году, так и в предыдущем.
Но нас интересует понедельник "нулевой" недели для начала отсчета, поэтому нужно из 5 января вычесть еще 7 дней, отсюда и получается -2:
=ДАТА(Год;1;5-7)-ДЕНЬНЕД(ДАТА(Год;1;3))
Исходная формула для расчета даты понедельника "нулевой" недели в привычном для нас виде могла бы выглядеть так:
=ДАТА(Год;1;5-7)-ДЕНЬНЕД(ДАТА(Год;1;4);2)

2. Найти понедельник текущей недели уже несложно:
+ НомерНедели * 7  , где НомерНедели = значение ячейки B2

3. Учесть еще и день недели (1 для понедельника и т.п.) тоже просто:
+ ДеньНедели - 1  , где ДеньНедели = значение ячейки C2

Если плясать не от "нулевого", а от первого понедельника, то формула выглядела бы понятнее, но и подлиннее:
=ДАТА(Год;1;5)-ДЕНЬНЕД(ДАТА(Год;1;4);2)+(НомерНедели-1)*7+ДеньНедели-1
применительно к примеру: =ДАТА(A2;1;5)-ДЕНЬНЕД(ДАТА(A2;1;4);2)+(B2-1)*7+C2-1
Изменено: ZVI - 03.03.2017 01:48:57
 
Можно еще такие формулы применить:
Код
=ДАТА(A2;1;B2*7+C2-4)-ОСТАТ(ДАТА(A2;1;2);7)
=ОКРУГЛТ(ДАТА(A2;;23);7)+B2*7+C2+1
=ОТБР(ДАТА(A2;;26)/7+B2;)*7+C2+1

Алгоритм тот же, что и у Владимира, только немного короче
Страницы: 1
Наверх