日期计算(输出应为月份的固定日期)

日期计算(输出应为月份的固定日期)

我正在构建一个 LaTeX 文档,该文档已从其他文件中获取了日期。日期显示为23 November 2015示例(由\today)。然后我需要输出与此原始日期相关的另一个日期。结果日期应始终是下个月或本月的第 15 天,具体取决于原始日期。

例如,如果原始日期为23 November 2015,即当月 15 日之后,则结果日期应为15 December 2015。如果原始日期为12 November 2015,则结果日期应为15 November 2015

是否有任何方法可以使用文件中的日期输出进行此类计算?

答案1

针对当前日期设置一些条件,advdate可用于检索您要查找的日期:

在此处输入图片描述

\documentclass{article}

\usepackage{advdate}

\newcommand{\nextfifteenth}[1][\relax]{{%
  \ifx\relax#1\relax\else\SetDate[#1]\fi% If a date was specified
  \today---%
  \ifnum\day<15\else% \day >= 15
    \AdvMonth{1}% Move to next month
  \fi
  \ThisDay{15}% Day will always be 15th
  \today
}}

\begin{document}

\today

\nextfifteenth

\nextfifteenth[15/12/2015]

\nextfifteenth[12/12/2012]

\today

\end{document}

12 December 2012您还可以使用以下命令以文本格式提供日期(例如):

\documentclass{article}

\usepackage{advdate,xparse}

\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\StrMonthToNum}{ m }
{
  \str_case:nnF { #1 } {
    { January   } {  1 }
    { February  } {  2 }
    { March     } {  3 }
    { April     } {  4 }
    { May       } {  5 }
    { June      } {  6 }
    { July      } {  7 }
    { August    } {  8 }
    { September } {  9 }
    { October   } { 10 }
    { November  } { 11 }
    { December  } { 12 }
  } { 12 } % Wrong month, defaults to December/12
}
\ExplSyntaxOff

\def\formattextdate#1 #2 #3\relax{%
  \ThisDay{#1}% Set day
  \expandafter\ThisMonth\expandafter{\StrMonthToNum{#2}}% Set month
  \ThisYear{#3}% Set year
}

\newcommand{\nextfifteenth}[1][\relax]{{%
  \ifx\relax#1\relax\else
  \expandafter\formattextdate #1\relax%
  \fi% If a date was specified
  \today---%
  \ifnum\day<15\else% \day >= 15
    \AdvMonth{1}% Move to next month
  \fi
  \ThisDay{15}% Day will always be 15th
  \today
}}

\begin{document}

\today

\nextfifteenth

\nextfifteenth[15 December 2015]

\nextfifteenth[12 December 2012]

\today

\end{document}

答案2

在此处输入图片描述

\documentclass{article}


\def\zz#1{#1 --- \nextXV{#1}}

\def\nextXV#1{\nextXVx#1\relax}

\def\nextXVx#1 #2 #3\relax{%
  \ifnum#2<16
    #1 15 #3%
  \else
    \csname nextXV#1\endcsname
    \space 15
    \expandafter\ifx\csname nextXV#1\endcsname\nextXVDec
      \the\numexpr#3+1\relax
    \else
      #3%
    \fi
  \fi}

\def\nextXVJan{Feb}
\def\nextXVFeb{Mar}
\def\nextXVMar{Apr}
\def\nextXVApr{May}
\def\nextXVmay{Jun}
\def\nextXVJun{Jul}
\def\nextXVJul{Aug}
\def\nextXVAug{Sep}
\def\nextXVSep{Oct}
\def\nextXVOct{Nov}
\def\nextXVNov{Dec}
\def\nextXVDec{Jan}

\begin{document}


\zz{Nov 12 2015}


\zz{Nov 23 2015}


\zz{Dec 23 2015}

\end{document}

相关内容