npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@financial-times/o-date

v6.1.0

Published

JavaScript utilities for formatting and updating dates in the FT style. Also useful for formatting dates relative to the current time.

Downloads

4,016

Readme

o-date

o-date formats time elements in the FT style, and supports formatting dates in relative time.

Usage

Check out how to include Origami components in your project to get started with o-date.

Markup

To render a human readable date in the FT format create a time element. Add a standard datetime attribute in the ISO 8601 format. Then add the data-o-component="o-date" attribute with a class o-date.

<time data-o-component="o-date" class="o-date" datetime="2000-06-14T23:00:00.000Z">
</time>

The rendered date will be a relative time or timestamp for a given date, in accordance with FT date formatting conventions E.g. 10 seconds ago, a minute ago, 3 hours ago, yesterday, July 18 2020.

Core Experience

We recommend a human readable date is added to the time element to support a core experience without JavaScript:

<time data-o-component="o-date" class="o-date" datetime="2000-06-14T23:00:00.000Z">
	June 15 2000
</time>

Node.js applications could provide a core experience fallback using the Financial-Times/ft-date-format library.

Format Options

Set the data-o-date-format attribute to customise how the time element is presented:

  • date-only: only show the date, without relative or time information.
  • time-ago-no-seconds: always display a relative time but if the relative time is under a minute display "Less than a minute ago" (e.g. Less than a minute ago, 10 minutes ago, an hour ago, 4 hours ago).
  • time-ago-limit-4-hours: always display a relative time but hide the time element if the datetime is older than 4 hours (e.g. 4 seconds ago, 10 minutes ago, 4 hours ago).
  • time-ago-limit-24-hours: always display a relative time but hide the time element if the datetime is older than 24 hours (e.g. 4 seconds ago, 10 minutes ago, 10 hours ago).
  • today-or-yesterday-or-nothing: display today if the datetime is today, yesterday if it was yesterday, or hide the time element if the datetime is older than yesterday.
  • custom format: it is recommended to use a standard FT format but a custom format may be used e.g. h:mm a.

Note: There used to be time-ago-abbreviated and time-ago-abbreviated-limit-4-hours options which are now both deprecated. These options still work but no longer show an abbreviated date. They will be removed in a future major version.

Text case

The formatted date defaults to all lower case (https://github.com/Financial-Times/ft-date-format/blob/master/index.js), e.g. 'an hour ago.

Set data-o-date-text-case=sentence attribute on the time element to capitalise only the first letter of the text (e.g. 'An hour ago').

Copy Options

By default o-date will replace the contents of the time element with the formatted date. To include extra content alongside the formatted date add an element with the data-o-date-printer attribute. o-date will output the formatted date within the data-o-date-printer element and will not change other child elements.

For example to include "updated at" copy within the time element followed by a relative time:

<time data-o-component="o-date" class="o-date" datetime="2020-07-18T19:01:05.033Z" data-o-date-format="time-ago-limit-4-hours">
	<!-- some arbitrary content -->
	<span>updated at</span>
	<!-- show the time ago here in the printed element -->
	<!-- fallback to the date if o-date JavaScript fails  -->
	<span data-o-date-printer>
		20 July 2020
	</span>
</time>

Render a date multiple times within the same o-date component by including multiple data-o-date-printer elements. Each printer element may have a unique format by adding the data-o-date-format attribute. If data-o-date-format is not set on the printer element the parent data-o-date-format element will be used:

<time data-o-component="o-date" class="o-date" datetime="2020-07-18T19:01:05.033Z" data-o-date-format="date-only">
	<!-- render the date in the "date-only" format here -->
	<!-- (as set on the parent "time" element) -->
	<span data-o-date-printer></span>
	<!-- render the date in the "time-ago-limit-4-hours" format here -->
	<span data-o-date-printer data-o-date-format="time-ago-limit-4-hours"></span>
	<!-- render the date in the custom format "h:mm" here -->
	<span data-o-date-printer data-o-date-format="h:mm"></span>
</time>

Previously a CSS class o-date__printer was used instead of the data-o-date-printer attribute. The class o-date__printer is now deprecated.

JavaScript

Instantiate o-date JavaScript in the same way as other Origami components.

For example call the init method to initialise all o-date instances on the page:

import ODate from '@financial-times/o-date'
ODate.init();

Pass a specific element:

import ODate from '@financial-times/o-date'
const myDateElement = document.querySelector('#my-date');
ODate.init(myDateElement);

Or dispatch the o.DOMContentLoaded event to auto-construct all Origami components on the page, including each o-date element with a data-o-component="o-date" attribute:

import '@financial-times/o-date';
document.addEventListener('DOMContentLoaded', function() {
	document.dispatchEvent(new CustomEvent('o.DOMContentLoaded'));
});

o-date#destroy()

Call on any instances to stop processing date updates and release the item reference.

Server-side

See the npm package @financial-times/ft-date-format for server-side date formatting. Note: It's not recommended to output the 'time ago' server side as it will not be cacheable and will not update in the browser if the user leaves the page open for a prolonged period of time.

Migration

State | Major Version | Last Minor Release | Migration guide | :---: | :---: | :---: | :---: ✨ active | 6 | N/A | migrate to v6 | ⚠ maintained | 5 | N/A | migrate to v5 | ⚠ maintained | 4 | 4.2 | migrate to v4 | ⚠ maintained | 3 | 3.1 | migrate to v3 | ╳ deprecated | 2 | 2.9 | - | ╳ deprecated | 1 | 1.2 | - |

Contact

If you have any questions or comments about this component, or need help using it, please either raise an issue, visit #origami-support or email Origami Support.


Licence

This software is published by the Financial Times under the MIT licence.