答案1
手动指定第一周的第一天
您可以使用pgfcalendar
LaTeX 计数器存储第一周的第一天,然后将其用作偏移量的基准。
您\setStartDate
设置第一周的第一天,然后\getDateOfWeek{<week>}{<offset>}
将定义\Year
,\Month
,\Day
以及第 周的日期,<week>
并附加<offset>
。
例如:
\setStartDate{2022-10-10}
将第一周设定为 2022 年 10 月 10 日开始。
和
\getDateOfWeek{1}{4}
你将获得 10 月 14 日
\getDateOfWeek{2}{0}
您将在 10 月 17 日\Month
获得\Day
。
代码
\documentclass{article}
\usepackage{pgfcalendar}
\newcounter{myStartDate}
\makeatletter
\newcommand*{\setStartDate}[1]{% for week 1
\begingroup
\pgfcalendardatetojulian{#1}{\@tempcnta}%
\setcounter{myStartDate}{\@tempcnta}%
\endgroup
}
\newcommand*{\getDateOfWeek}[2]{%
\begingroup
\@tempcnta=\inteval{(#1-1)*7+#2}\relax
\advance\@tempcnta by \c@myStartDate
\edef\@temp{\endgroup\noexpand\pgfcalendarjuliantodate{\the\@tempcnta}}%
\@temp{\Year}{\Month}{\Day}%
}
\makeatother
\usepackage{pgffor}
\begin{document}
\setStartDate{2022-01-03}
\foreach \week in {1,...,52}{
Week \week\ goes from \getDateOfWeek{\week}{0}\Month/\Day\ to
\getDateOfWeek{\week}{4}\Month/\Day.\par}
\end{document}
输出
使用年份的实际周数。
带着pgfcalendar-ext
我的包裹tikz-ext
包裹其中包括我的另一个答案并使用符合 ISO 8601 的星期编号方式,这主要意味着新的一周从星期一开始。
这是一个解决方案
\getTwoDaysOfWeek[<year>]{<week>}{<offset>}
{<year>}{<month>}{<day>}{<offset year>}{<offset month>}{<offset day>}
它为你定义了六个宏(第二行的参数),其中包含
<week>
的第一<year>
天- 的
<offset>
第一天之后的第二天。<week>
<year>
该<year>
参数是可选的,默认是当前年份。
代码
\documentclass{article}
\usepackage{pgfcalendar-ext}
\newcommand*{\stripZero}[1]{\if0#1\else#1\fi}
\makeatletter
\newcommand*{\getTwoDaysOfWeek}[9][\the\year]{%
% #1 = year (defaults to current year)
% #2 = week number, #3 = offset
% #4/#5/#6 = start year/month/day
% #7/#8/#9 = end year/month/day
\begingroup
\pgfcalendardatetojulian{#1-01-01}{\@tempcnta}%
\pgfcalendarjuliantoweekday{\@tempcnta}{\@tempcntb}%
\edef\@dateStartWeek{\the\numexpr\@tempcnta-\@tempcntb+#2*7-7\relax}%
\pgfcalendarjulianyeartoweek{\@tempcnta}{#1}{\@tempcntb}%
\ifnum\@tempcntb>1
% This is the last week of the previous year
\edef\@dateStartWeek{\the\numexpr\@dateStartWeek+7\relax}%
\fi
\edef\@temp{\endgroup%
\noexpand\pgfcalendarjuliantodate
{\@dateStartWeek}{\noexpand#4}{\noexpand#5}{\noexpand#6}%
\noexpand\pgfcalendarjuliantodate
{\the\numexpr\@dateStartWeek+#3\relax}{\noexpand#7}{\noexpand#8}{\noexpand#9}}%
\@temp
}
\makeatother
\newcommand*{\weekCell}[2][\the\year]{%
\begin{tabular}[t]{@{}l@{}}Week #2:\\
\getTwoDaysOfWeek[#1]{#2}{4}{\y}{\m}{\d}{\Y}{\M}{\D}%
\stripZero\m/\stripZero\d--\stripZero\M/\stripZero\D
\end{tabular}}
\usepackage{pgffor}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{lll}
\toprule
Time & Content & Note \\\midrule
\weekCell{1} & Content 1 & Note 1 \\
\weekCell{2} & Content 2 & Note 2 \\
\dots & \dots & \dots \\\bottomrule
\end{tabular}
\end{document}