110

Currently I put the date in my document using: \date{\today}

How do I display the date in the YYYY-MM-DD format?

Vincent
  • 5,257
  • 4
    See here http://www.ctan.org/pkg/datetime From the documentation (pg 10) we have The option yyyymmdd makes \today produce YYYY/MM/DD date – Sigur Jan 04 '14 at 13:30

7 Answers7

89

edit: As noted by @Sean Allred, datetime has been superseded by datetime2, which defaults to YYYY-MM-DD.

Using the package datetime with the option yyyymmdd as

\usepackage[yyyymmdd]{datetime}

you just change the value of \dateseparator to replace the default / by - (or -- if you want).

\renewcommand{\dateseparator}{--}

Also as noted by @Vincent, you can define your own date format.

enter image description here

J. Doe
  • 103
Sigur
  • 37,330
  • 4
    Somebody should check whether ISO 8601 says that the separator has to be - or --. (http://www.iso.org/iso/home/standards/iso8601.htm). Definitely YYYY/MM/DD should not be used - that would violate the standard. Keith – KeithB Jan 08 '14 at 09:53
  • 2
    @KeithB, Wikipedia claims, “The separator used between date values (year, month, week, and day) is the hyphen”. Also, it’s unlikely the standard mandates characters encoded neither in EBCDIC nor ASCII. – J. C. Salomon Jan 13 '14 at 19:20
  • 14
    note: datetime has been superseded by datetime2 – Sean Allred Apr 06 '15 at 17:38
  • Sigur is correct. However, note that the datetime package must come after the babel package. Babel seems to change the format as well. – qznc Sep 02 '15 at 12:34
  • 1
    According to the CTAN page, datetime is now obsolete and has been replaced by datetime2. – Michael Mior Mar 19 '18 at 14:54
  • @MichaelMior This is in the 1st line of the answer. – Sigur Mar 19 '18 at 15:58
  • So it is facepalm – Michael Mior Mar 20 '18 at 16:25
  • 1
    @KeithB for separation: tl;dr: simply - as in „The separator used between date values (year, month, week, and day) is the hyphen, while the colon is used as the separator between time values (hours, minutes, and seconds).“0. Original documents unfortunately are behind a paywall, some libraries will have free access though. – vv01f Jun 11 '19 at 09:12
51

My solution needs no packages. The only thing you need to know is that the primitive registers \day, \month and \year include the desired information:

\def\mydate{\leavevmode\hbox{\the\year-\twodigits\month-\twodigits\day}}
\def\twodigits#1{\ifnum#1<10 0\fi\the#1}

The date in my format: \mydate.
ojdo
  • 2,125
wipet
  • 74,238
37

Use the package datetime2

\usepackage[style=iso]{datetime2}
pseyfert
  • 237
user13225
  • 719
  • 9
    This should be an edit to the other answers using datetime since datetime is now superseded and should no longer be used for new documents. – Paul Gessler Apr 06 '15 at 17:55
  • 7
    datetime2 Error: 'iso' is not a recognised dialect. – crypdick Feb 22 '17 at 18:55
  • 1
    sorry but I do not see how this package is useful. It seems to force you to manually enter the date values, which it then formats.... so why not just manually write them yourself in the correct format in the document? What is this accomplishing? This answer does not actually show how to use the datetime2 to solve the problem in the question. – user5359531 Aug 31 '17 at 02:22
  • 4
    The package option should be style=iso, but a numeric YYYY-MM-DD style is the default anyway, so it's not needed. – Nicola Talbot Jun 07 '18 at 11:30
  • 4
    @user5359531 \documentclass{article}\usepackage{datetime2}\begin{document}\today\end{document} is a basic MWE that prints the current date as YYYY-MM-DD style. As for specific dates, the syntax is \DTMdate{2018-06-07} but the formatting depends on the style. So while it does just display 2018-06-07 for the default style, if you change the style it will display the date in a different format. – Nicola Talbot Jun 07 '18 at 11:34
26

According to the link of Sigur:

\usepackage{datetime}
\newdateformat{specialdate}{\THEYEAR-\twodigit{\THEMONTH}-\twodigit{\THEDAY}}
\date{\specialdate\today}
Vincent
  • 5,257
17

Use the package isodate

\usepackage[iso,german]{isodate}

It offers various options (and needs one of its language options) and commands to change the date format.

6

Recently (May, 2018), Donald P. Goodman III created the new package texdate.

From the package documentation:

It can print dates, advance them by numbers of days, weeks, or months, determine the weekday automatically, and print them in (mostly) arbitrary format. It can also print calendars (monthly and yearly) automatically, and can be easily localized for non-English languages.

For example, the YYYY-MM-DD format of today is:

\documentclass{article}
\usepackage{texdate}
\begin{document}
\initcurrdate
\printfdate{ISOext}
\end{document}

enter image description here

CarLaTeX
  • 62,716
0

I found an easier way to get today's date in YYYY-MM-DD format:

\newcommand\twodigits[1]{%
   \ifnum#1<10 0#1\else #1\fi
}

\number\year-\twodigits{\number\month}-\twodigits{\number\day}

Dear Mary,

Today I have received what I need to tell you; I was taking a walk and I finally know what advice to give. In the words of the great Kanye West, \textit{"If you have the opportunity to play this game called life, you have to appreciate every moment."} Keep striving toward success, and that is what you will become.

Also linux $>$ windows.

Best, \ John Doe

Result:

enter image description here

  • You could probably simplify \twodigits by just conditioning for the prefix: \newcommand{\twodigits}[1]{\ifnum#1<10 0\fi#1}. Also, your output doesn't include the -s. – Werner Mar 01 '22 at 19:23
  • @Werner I forgot to create a .jpg that reflected the dashes in the above code; It is only the result pic that doesn't show the dashes. When you execute the code the dashes are present. – Alex Angel Mar 27 '22 at 18:08