手动指定第一周的第一天

手动指定第一周的第一天

我正在制定每周教学计划。我需要每周的开始日期和结束日期。例如,第 30 周我想要 7/25 - 7/29,第 31 周我想要 1/8 - 5/8。我不想手动执行此操作,因为这需要很长时间。有没有一种方便的方法可以获取一周的第一天和最后一天?谢谢。在此处输入图片描述

答案1

手动指定第一周的第一天

您可以使用pgfcalendarLaTeX 计数器存储第一周的第一天,然后将其用作偏移量的基准。

\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}

输出

在此处输入图片描述

相关内容