如何在 datetime2 中指定日期并使用它进行计算?

如何在 datetime2 中指定日期并使用它进行计算?

我想在主头文件 TEX 文件中指定一个日期(并为其命名),然后在几个独立的子文件中引用该日期。由于这甚至在单个文件中都不起作用,因此可以简化为以下 MWE:

% Compile with XeLaTeX

\documentclass[a4paper,12pt,]{article}

\usepackage{polyglossia}
\usepackage[british]{datetime2}
\usepackage{datetime2-calc}

\begin{document}

The present date: \DTMdate{2018-01-24}

Two weeks later: \DTMdate{2018-01-24+14}

Beautiful!

\DTMsavedate{RandomDate}{1991-02-03}

% FAULTY LINES JUST TO SHOW WHAT I TRIED THAT DOESN'T WORK
%\DTMsavedate{RandomDate1}{\DTMdisplaydate{2004}{05}{06}{3}}
%\DTMsavedate{RandomDate2}{\DTMdate{2017-08-09}}
% AND OF COURSE IT DOESN'T, BUT AT LEAST I TRIED.
% IT WOULD HAVE BEEN TOO EASY! :D

A random date \DTMusedate{RandomDate}

%Two weeks later: \DTMdate{RandomDate+14} <------------------------------PROBLEM

\end{document}

我如何指定一个日期并使用该日期计算从该日期起的 1、2、3 周等?

我在以下文档中没有找到答案:

我不明白我该怎么做使用日期进行计算,尽管我怀疑它含有我正在寻找的解决方案。

答案1

最简单的方法是使用偏移量将保存的日期转换为儒略数,然后使用以下命令\DTMsaveddateoffsettojulianday将结果转换为保存的日期:\DTMsavejulianday

\documentclass[a4paper,12pt,]{article}

\usepackage{polyglossia}
\usepackage[british,calc]{datetime2}

\begin{document}

The present date: \DTMdate{2018-01-24}

Two weeks later: \DTMdate{2018-01-24+14}

Beautiful!

\DTMsavedate{RandomDate}{1991-02-03}

A random date \DTMusedate{RandomDate}

\newcount\julianday
\DTMsaveddateoffsettojulianday{RandomDate}{14}{\julianday}
\DTMsavejulianday{RandomDate2}{\julianday}

\DTMusedate{RandomDate2}

\end{document}

如果需要多次执行此操作,则创建一个辅助命令会更简单:

\documentclass[a4paper,12pt,]{article}

\usepackage{polyglossia}
\usepackage[british,calc]{datetime2}

% syntax: \newdateoffset{original date name}{new date name}{offset}
\newcount\julianday
\newcommand{\newdateoffset}[3]{%
  \DTMsaveddateoffsettojulianday{#1}{#3}{\julianday}%
  \DTMsavejulianday{#2}{\julianday}%
}

\begin{document}

The present date: \DTMdate{2018-01-24}

Two weeks later: \DTMdate{2018-01-24+14}

Beautiful!

\DTMsavedate{RandomDate}{1991-02-03}

A random date \DTMusedate{RandomDate}

\newdateoffset{RandomDate}{RandomDate2}{14}

\DTMusedate{RandomDate2}

\end{document}

现在日期:2018 年 1 月 24 日 两周后:2018 年 2 月 7 日 很美!随机日期 1991 年 2 月 3 日 1991 年 2 月 17 日

最后,既然您提到需要在序言中指定初始日期,那么这也有效并给出与上面相同的输出:

\documentclass[a4paper,12pt,]{article}

\usepackage{polyglossia}
\usepackage[british,calc]{datetime2}

% syntax: \newdateoffset{original date name}{new date name}{offset}
\newcount\julianday
\newcommand{\newdateoffset}[3]{%
  \DTMsaveddateoffsettojulianday{#1}{#3}{\julianday}%
  \DTMsavejulianday{#2}{\julianday}%
}

\DTMsavedate{RandomDate}{1991-02-03}

\newdateoffset{RandomDate}{RandomDate2}{14}

\begin{document}

A random date \DTMusedate{RandomDate}

\DTMusedate{RandomDate2}

\end{document}

相关内容