两个日期之间的差异

两个日期之间的差异

是否有一个宏可以根据给定的开始日期和当前日期计算年份和月份。

假设我有 05/02/2010(开始日期),那么它应该执行以下操作:今天 - 05/02/2010 =>1 年 1 个月。我想你也可以添加天数,但目前我真的不需要。

我正在使用 xelatex,如果有帮助的话。

答案1

datenumber包允许您计算日期差值并以天数形式返回差值。您仍需要从中得出年份和月份。

\daydifftoday手册中的示例开始:

\documentclass{article}

\usepackage{datenumber}

\newcounter{dateone}
\newcounter{datetwo}

\newcommand{\difftoday}[3]{%
      \setmydatenumber{dateone}{\the\year}{\the\month}{\the\day}%
      \setmydatenumber{datetwo}{#1}{#2}{#3}%
      \addtocounter{datetwo}{-\thedateone}%
      \the\numexpr-\thedatetwo/365\relax\space year(s),
      \the\numexpr(-\thedatetwo - (-\thedatetwo/365)*365)/30\relax\space month(s)
} 
\begin{document}

\difftoday{2010}{02}{01}

\end{document}

此代码可以进一步细化,以检查差异是否少于一年、一年或超过一年,以相应地显示“年份”。月份的计数相同:

\documentclass{article}

\usepackage{datenumber}
\usepackage{calc}

\newcounter{datetoday}
\newcounter{diffyears}
\newcounter{diffmonths}
\newcounter{diffdays}


\newcommand{\difftoday}[3]{%
      \setmydatenumber{datetoday}{\the\year}{\the\month}{\the\day}%
      \setmydatenumber{diffdays}{#1}{#2}{#3}%
      \addtocounter{diffdays}{-\thedatetoday}%
      \ifnum\value{diffdays}>0
        \def\diffbefore{in }%
        \def\diffafter{}%
      \else
        \def\diffbefore{}%
        \def\diffafter{ago}%
        \setcounter{diffdays}{-\value{diffdays}}%
      \fi
      \setcounter{diffyears}{\value{diffdays}/365}%
      \setcounter{diffdays}{\value{diffdays}-365*\value{diffyears}}%
      \setcounter{diffmonths}{\value{diffdays}/30}%
      \setcounter{diffdays}{\value{diffdays}-30*\value{diffmonths}}%
      %
      \diffbefore
      \ifnum\value{diffyears}=0
      \else
        \ifnum\value{diffyears}>1
            \thediffyears\space years,
        \else
            \thediffyears\space year,
        \fi
      \fi
      \ifnum\value{diffmonths}=0
      \else
        \ifnum\value{diffmonths}>1
            \thediffmonths\space months
        \else
            \thediffmonths\space month
        \fi
      \fi
      \diffafter
}

\begin{document}

\difftoday{2011}{02}{01}

\difftoday{2010}{02}{01}

\difftoday{2009}{02}{01}

\difftoday{2009}{01}{01}


\difftoday{2012}{02}{01}

\difftoday{2012}{12}{01}

\end{document}

得出:

1 month ago
1 year, 1 month ago
2 years, 1 month ago
2 years, 2 months ago
in 10 months
in 1 year, 8 months

当精度为月(每个月按 30 天计算)时,这应该没问题。精确的日期则需要考虑每个月的不同天数和闰年。

注意\diffbefore\diffafter宏。您可以根据自己的喜好和/或语言调整它们。

相关内容