Giter Club home page Giter Club logo

moment-duration-format's Introduction

Moment Duration Format

Format plugin for the Moment Duration object.

This is a plugin to the Moment.js JavaScript date library to add comprehensive formatting to Moment Durations.

Format template grammar is patterned on the existing Moment Date format template grammar, with a few modifications because durations are fundamentally different from dates.

This plugin does not have any dependencies beyond Moment.js itself, and may be used in the browser and in Node.js.


Installation

Node.js

npm install moment-duration-format

Bower

bower install moment-duration-format

Browser

<script src="path/to/moment-duration-format.js"></script>

When using this plugin in the browser, be sure to include moment.js on your page first.


Usage

Module

To use this plugin as a module, use the require function:

require("moment-duration-format");

The plugin does not export anything, so there is no need to assign the require output to a variable.

The plugin depends on moment.js, which is not specified as a package dependency in the currently published version.

Basics

The duration format method can format any moment duration. If no template or other arguments are provided, the default template function will generate a template string based on the duration's value.

moment.duration(123, "minutes").format();
// "2:03:00"

moment.duration(123, "months").format();
// "10y 3m"

The duration format method may be called with three optional arguments:

moment.duration.format([template] [, precision] [, settings])

Template

template (string|function) is the string used to create the formatted output, or a function that returns the string to be used as the format template.

moment.duration(123, "minutes").format("h:mm");
// "2:03"

The template string is parsed for moment-token characters, which are replaced with the duration's value for each unit type. The default tokens are:

years:   Y or y
months:  M
weeks:   W or w
days:    D or d
hours:   H or h
minutes: m
seconds: s
ms:      S

Token characters may be customized (see below for an example).

Escape token characters within the template string using square brackets.

moment.duration(123, "minutes").format("h [hrs], m [min]");
// "2 hrs, 3 min"

Escape characters may also be customized (see below for an example).

Precision

precision (number) defines the number of digits to display for the final value.

The default precison value is 0.

moment.duration(123, "minutes").format("h [hrs]");
// "2 hrs"

Positive precision defines the number of digits to display to the right of the decimal point.

moment.duration(123, "minutes").format("h [hrs]", 2);
// "2.04 hrs"

Negative precision will truncate the value to the left of the decimal point.

moment.duration(123, "minutes").format("m [min]", -1);
// "120 min"

Settings

settings is an object that can override any of the default moment duration format options.

Both the template and precision arguments may be specified as properties of a single settings object argument, or they may be passed separately along with an optional settings object.

moment.duration(123, "minutes").format({ template: "h [hrs]", precision: 2 });
// "2.04 hrs"

Trim

Leading tokens are automatically trimmed when they have no value.

moment.duration(123, "minutes").format("d[d] h:mm:ss");
// "2:03:00"

To stop that behavior, set { trim: false }.

moment.duration(123, "minutes").format("d[d] h:mm:ss", { trim: false });
// "0d 2:03:00"

Use { trim: "right" } to trim from the right.

moment.duration(123, "minutes").format("[seconds:] s -- [minutes:] m -- [hours:] h -- [days:] d", { trim: "right" });
// "seconds: 0 -- minutes: 3 -- hours: 2"

Force Length

Force the first moment token with a value to render at full length, even when the template is trimmed and the first moment token has a length of 1. Sounds more complicated than it is.

moment.duration(123, "seconds").format("h:mm:ss");
// "2:03"

If you want minutes to always be rendered with two digits, you can set the first token to a length greater than 1 (this stops the automatic length trimming for the first token that has a value).

moment.duration(123, "seconds").format("hh:mm:ss");
// "02:03"

Or you can use { forceLength: true }.

moment.duration(123, "seconds").format("h:mm:ss", { forceLength: true });
// "02:03"

Tokens

Moment tokens are defined as regular expressions, and may be customized. Token definitions may be passed in the settings object, but are more likely set on the defaults object.

Escape

Default escape token regexp: /\[(.+?)\]/

Define something other than square brackets as escape characters.

moment.duration.fn.format.defaults.escape = /\((.+?)\)/;
moment.duration(123, "seconds").format("m (minutes)", 2);
// "2.04 minutes"

Years

Default years token regexp: /[Yy]+/

Define years token for spanish language formatting.

moment.duration.fn.format.defaults.years = /[Aa]+/;
moment.duration(123, "weeks").format("a [años]", 2);
// "2.35 años"

Months

Default months token regexp: /M+/

Define months token to use only lower-case m.

moment.duration.fn.format.defaults.months = /m+/;
moment.duration(123, "weeks").format("m M", 2);
// "28.36 M"

Weeks

Default weeks token regexp: /[Ww]+/

Define weeks token to use only lower-case w.

moment.duration.fn.format.defaults.weeks = /w+/;
moment.duration(123, "days").format("w W", 2);
// "17.57 W"

Days

Default days token regexp: /[Dd]+/

Define days token to use only lower-case d.

moment.duration.fn.format.defaults.days = /d+/;
moment.duration(123, "hours").format("d D", 2);
// "5.12 D"

Hours

Default hours token regexp: /[Hh]+/

Define hours token to use only lower-case h.

moment.duration.fn.format.defaults.hours = /h+/;
moment.duration(123, "minutes").format("h H", 2);
// "2.04 H"

Minutes

Default minutes token regexp: /m+/

Define minutes token to use only lower-case n.

moment.duration.fn.format.defaults.minutes = /n+/;
moment.duration(123, "seconds").format("n:ss");
// "2:03"

Seconds

Default seconds token regexp: /s+/

Milliseconds

Default milliseconds token regexp: /S+/

General

Default general token regexp: /.+?/

Not sure why you'd want to redefine the general token regexp, but you can. Just make sure it's lazy so the other token expressions can do their jobs.

moment-duration-format's People

Contributors

rob--w avatar twipped avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.