Skip to navigation Skip to main content
Eleventy
Eleventy Documentation
Stable
3.0.0
Toggle Menu
Eleventy 5.81s
Remix 40.14s

Content Dates

Contents

Setting a Content Date in Front Matter

Add a date key to your front matter to override the default date (file creation) and customize how the file is sorted in a collection.

Syntax YAML Front Matter
---
date: 2016-01-01
---
Syntax YAML Front Matter
---
date: Last Modified
---

Valid date values:

  • "Last Modified": automatically resolves to the file’s last modified date
  • "Created": automatically resolves to the file’s created date (default, this is what is used when date is omitted).
  • "git Last Modified": automatically resolves to the file’s latest git commit. If a file is not yet checked in to git, it assigns Date.now() to page.date instead.
  • "git Created": Added in v2.0.0 automatically resolves to the file’s first git commit. It uses git's --follow flag to make a "best effort" renaming tracking. If a file is not yet checked in to git, it assigns Date.now() to page.date instead.
  • 2016-01-01 or any other valid YAML date value (leaving off the time assumes midnight in UTC, or 00:00:00Z)
  • "2016-01-01" or any other valid ISO 8601 string that Luxon’s DateTime.fromISO can parse (see also the Luxon API docs).

If a date key is omitted from the file, we then look for a YYYY-MM-DD format anywhere in the file path (even folders). If there are multiple dates found, the first is used. ℹ️ Note that starting in 1.0 for consistency with front matter formats file name date formats are now assumed to be UTC.

As a last resort, the file creation date is used. Careful when relying on file creation dates on a deployment server.

INFO:
Trying to use date in your templates? The date value will likely not be of much use, since Eleventy performs no transformation on this front matter value. You probably want page.date instead. Check out the values available in the page variable.

Configuration API for Custom Date Parsing

Eleventy v3.0 includes an eleventyConfig.addDateParsing method for adding your own custom date parsing logic. This is a preprocessing step for existing Date logic. Any number of callbacks can be assigned using eleventyConfig.addDateParsing and we’ll run them serially. Related GitHub #867.

In the callback, you can return:

  1. a Luxon DateTime instance to short-circuit page.date with this new value (we do the .toJSDate() conversion for you).
  2. a JavaScript Date to short-circuit page.date with this new value.
  3. any new valid value will be processed using existing Date parsing rules. As an example, you can return a new string that will be processed by Luxon (as already happens).
  4. anything falsy (or no return) will ignore the callback.

Custom Date Parsing Example

Here’s an example using IANA time zone codes:

---
date: 2019-08-31 23:59:56 America/New_York
---
eleventy.config.js
import { DateTime } from "luxon";

export default function(eleventyConfig) {
eleventyConfig.addDateParsing(function(dateValue) {
return DateTime.fromFormat(dateValue, "yyyy-MM-dd hh:mm:ss z");
});
};
const { DateTime } = require("luxon");

module.exports = function(eleventyConfig) {
eleventyConfig.addDateParsing(function(dateValue) {
return DateTime.fromFormat(dateValue, "yyyy-MM-dd hh:mm:ss z");
});
};

Dates off by one day?

WARNING:
This is a Common Pitfall.

You’re probably displaying UTC dates in a local time zone.

Many date formats in Eleventy (when set in your content‘s filename as YYYY-MM-DD-myfile.md or in your front matter as date: YYYY-MM-DD) assume midnight in UTC. When displaying your dates, make sure you’re using the UTC time and not your own local time zone, which may be the default.

Example

Syntax YAML Front Matter
---
date: 2018-01-01
---

If you output the Date object in a template, it will convert it to a string for display:

Syntax Liquid, Nunjucks
Using {{ page.date }} will display a date using a local time zone like:

Sun Dec 31 2017 18:00:00 GMT-0600 (Central Standard Time)

Note that this appears to be the wrong day!

Nunjucks allows you to call JavaScript methods in output {{ page.date.toString() }}. Liquid does not allow this.

Syntax Nunjucks
But {{ page.date.toUTCString() }} will correctly
display a date with a UTC time zone like:

Mon, 01 Jan 2018 00:00:00 GMT

You could add your own toUTCString filter in Liquid to perform the same task.

Also on YouTube

Collections out of order when you run Eleventy on your Server?

WARNING:
This is a Common Pitfall.

Be careful relying on the default date associated with a piece of content. By default Eleventy uses file creation dates, which works fine if you run Eleventy locally but may reset in some conditions if you run Eleventy on a Continuous Integration server. Work around this by using explicit date assignments, either in your front matter or your content’s file name. Read more at Setting a Content Date in Front Matter.

INFO:
The new date: "git Last Modified" feature will resolve this issue! Source control dates are available and will be consistent on most Continuous Integration servers. Read more at Setting a Content Date in Front Matter.

From the Community

×49 resources courtesy of 11tybundle.dev curated by IndieWeb Avatar for https://www.bobmonsour.com/Bob Monsour

Expand to see 44 more resources.

Other pages in Eleventy Projects: