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 🙏

© 2026 – Pkg Stats / Ryan Hefner

dateline

v5.1.0

Published

Associated Press style date & times for JavaScript & Node.js

Readme

Dateline

Associated Press style date & times

Latest Version Build status install size

Installation

$ npm install dateline

In the browser

Works via <script type="module"> or any bundler that supports ES modules.

On the server

import Dateline from "dateline";

Usage

Pass in a JavaScript Date, get a wrapped Dateline object back:

const newYears = Dateline(new Date(2014, 0, 1, 0, 0));

// Any valid date will do
const moonWalk = Dateline(new Date(-14159040000));

// Defaults to the current date/time
const now = Dateline();

Call through to native date methods to your heart's content:

moonWalk.getFullYear();
// -> 1969

Dateline adds two methods to the mix:

#getAPTime() returns an AP-style time string:

newYears.getAPTime();
// -> 'midnight'

moonWalk.getAPTime();
// -> '9:56 p.m.'

Available options:

  • includeMinutesAtTopOfHour: Force :00 at the top of the hour.

    AP style omits the :00 when referencing a time that lands on the hour, so the default renders "2 p.m." rather than "2:00 p.m.". Pass true to opt into the padded form. Special times (midnight and noon) are unaffected.

// The current time is 11:00 a.m....

Dateline().getAPTime();
// -> '11 a.m.'

Dateline().getAPTime({includeMinutesAtTopOfHour: true});
// -> '11:00 a.m.'
  • suppressAmPm: Drop the trailing a.m. / p.m. suffix.

    AP style omits the meridiem on the opening endpoint of a range — e.g. "7-8 p.m.", not "7 p.m.-8 p.m." — so callers composing ranges need a way to render a bare time. midnight and noon are unaffected.

let start = Dateline(new Date(2013, 7, 7, 19, 0));
let end = Dateline(new Date(2013, 7, 7, 20, 0));

start.getAPTime({suppressAmPm: true}) + "-" + end.getAPTime();
// -> '7-8 p.m.'

Dateline(new Date(2013, 7, 7, 19, 1)).getAPTime({suppressAmPm: true});
// -> '7:01'

#getAPDate(options) returns an AP-style date string:

// Today is April 29, 2014

newYears.getAPDate();
// -> 'Jan. 1'

moonWalk.getAPDate();
// -> 'July 20, 1969'

Available options:

  • includeYear: Force the year to be included or excluded.

    The default hides the year when it matches the current year, and shows it otherwise. Pass true to force the year on, or false to force it off — both override the default regardless of the date.

// Today is August 28, 2014

Dateline().getAPDate();
// -> 'Aug. 28'

Dateline(new Date(2012, 7, 28)).getAPDate();
// -> 'Aug. 28, 2012'

Dateline().getAPDate({includeYear: true});
// -> 'Aug. 28, 2014'

Dateline(new Date(2012, 7, 28)).getAPDate({includeYear: false});
// -> 'Aug. 28'
  • useDayNameWithinWeek: When true, render dates within a week of today as weekday names.

    Dates less than seven days away in either direction render as 'Monday', 'Tuesday', etc. Dates further out are unaffected — they render as the normal month-and-day. Per AP style, weekday names stand in for the date within a week of the current date.

// Today is Monday, June 22, 2009

Dateline(new Date(2009, 5, 21)).getAPDate({useDayNameWithinWeek: true});
// -> 'Sunday'

Dateline(new Date(2009, 5, 22)).getAPDate({useDayNameWithinWeek: true});
// -> 'Monday'

Dateline(new Date(2009, 5, 23)).getAPDate({useDayNameWithinWeek: true});
// -> 'Tuesday'

Dateline(new Date(2009, 5, 29)).getAPDate({useDayNameWithinWeek: true});
// -> 'June 29'