
Можно ли использовать datetime2
для расчета предыдущего месяца \today
? (Как вариант, другой пакет).
Я нашел несколько решений, которые используют отрицательное вычитание дней, но это может вызвать проблемы в конце месяца.
Пример: \today
= 12-ИЮЛ-2017
Требуемый вывод: «Сегодня 12-ИЮЛ-2017. Прошлый месяц был июнь».
решение1
Вы можете сохранить текущую дату, используя \DTMsavenow
и затем использовать \DTMfetchmonth
и DTMmonthname
или их эквиваленты для вычисления предыдущего (или следующего) месяца. Я добавил обе версии: \lastmonth
и .\nextmonth
\documentclass{article}
\usepackage[calc]{datetime2}
\usepackage{ifthen}
\newcommand\lastmonth[1]{\ifthenelse{\DTMfetchmonth{#1}=1}
{\DTMmonthname{12}}{\DTMmonthname{\numexpr\DTMfetchmonth{#1}-1\relax}}}
\newcommand\nextmonth[1]{\ifthenelse{\DTMfetchmonth{#1}=12
{\DTMmonthname{1}}{\DTMmonthname{\numexpr\DTMfetchmonth{#1}+1\relax}}}
\begin{document}
\DTMsavenow{today}
\DTMsavedate{jan20}{2017-01-20}
Today is \today.
Last month was \lastmonth{today}.
Today is \DTMusedate{jan20}.
Last month was \lastmonth{jan20}.
Next month is \nextmonth{jan20}.
\end{document}
решение2
Вы также можете сделать это без каких-либо пакетов. Вы можете определить свой собственный \lastmonth
макрос:
\documentclass{article}
% \setdate{<day>}{<month>}{<year>}
\newcommand{\setdate}[3]{\day=#1\month=#2\year=#3\relax}%
\newcommand{\lastmonth}{%
\ifcase\month\or% 0
December\or % 1
January\or % 2
February\or % 3
March\or % 4
April\or % 5
May\or % 6
June\or % 7
July\or % 8
August\or % 9
September\or % 10
October\or % 11
November\fi % 12
}
\begin{document}
Today is \today.
Last month was \lastmonth.
\setdate{20}{1}{2017}%
Today is \today.
Last month was \lastmonth.
\end{document}