是否有一个宏可以根据给定的开始日期和当前日期计算年份和月份。
假设我有 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
宏。您可以根据自己的喜好和/或语言调整它们。