Получение даты из номера недели автоматически для определенного года

Получение даты из номера недели автоматически для определенного года

Есть ли способ автоматически выводить дату на основе номера недели?

Точнее: я ввожу номер недели для определенного года и на выходе получаю дату с понедельника по воскресенье?

Есть несколько пакетов для создания календарей, ни один из них, похоже, этого не позволяет. Есть ли у кого-нибудь хороший совет?

(Taco Hoekwater сделал что-то похожее на мой вопрос, но наоборот: Макрос для номера недели)

решение1

Я также добавилобратный PGFCalendarно мы можем использовать его и немного математики, чтобы получить правильный день начала и окончания нужной недели.

И PGFCalendar, и мое расширениеTikZ-extне предоставляют высокоуровневого интерфейса для всего этого, поэтому нам приходится жонглировать некоторыми подсчетами, значениями и преобразованиями.

Это не проверит, действительно ли данная неделя находится в году. Вы можете использовать , \weekinyear{174}{2021}чтобы получить тот же результат, что и в коде ниже.

Код

\documentclass{article}
\usepackage{pgfcalendar-ext}
\makeatletter
\newcommand*\weekinyear[2]{% #1 = week, #2 = year
  \pgfcalendardatetojulian{#2-01-01}{\count@}%
  \edef\wiy@first{\the\count@}%
  \pgfcalendarjuliantoweekday{\count@}{\count@}%
  \edef\wiy@day{\the\count@}%
  \pgfcalendarjulianyeartoweek{\wiy@first}{#2}{\count@}%
  \ifnum\count@>1 \count@=0 \fi% first day might be in last week of prev year
  \pgfintset\count@{\wiy@first+(#1-\count@)*7-\wiy@day}%
  \pgfcalendarjuliantodate{\count@}{\wiyStartY}{\wiyStartM}{\wiyStartD}%
  \advance\count@ by 6
  \pgfcalendarjuliantodate{\count@}{\wiyEndY}{\wiyEndM}{\wiyEndD}%
}
\makeatother
\begin{document}
\weekinyear{18}{2024}
Week 18 in year 2024 starts on
Monday \wiyStartY-\wiyStartM-\wiyStartD\ and
ends on Sunday \wiyEndY-\wiyEndM-\wiyEndD.
\end{document}

Выход

18-я неделя 2024 года начинается в понедельник 29.04.2024 и заканчивается в воскресенье 05.05.2024.

Связанный контент