ms: Tiny Millisecond Module by Guillermo Rauch

By  on  

This code snippet is now available with a GitHub repository: https://github.com/guille/ms.js

I wanted to pass along a simple but useful module that was posted as a Gist to GitHub by Guillermo Rauch.  This simple module, available via NPM as ms, provides a simple function for turning a human-readable string into milliseconds.

// Created by milliseconds

/**

# ms.js

No more painful `setTimeout(fn, 60 * 4 * 3 * 2 * 1 * Infinity * NaN * '☃')`.

    ms('2d')      // 172800000
    ms('1.5h')    // 5400000
    ms('1h')      // 3600000
    ms('1m')      // 60000
    ms('5s')      // 5000
    ms('500ms')   // 500
    ms('100')     // 100
    ms(100)       // 100

**/

(function (g) {
  var r = /(\d*.?\d+)([mshd]+)/
    , _ = {}

  _.ms = 1;
  _.s = 1000;
  _.m = _.s * 60;
  _.h = _.m * 60;
  _.d = _.h * 24;

  function ms (s) {
    if (s == Number(s)) return Number(s);
    r.exec(s.toLowerCase());
    return RegExp.$1 * _[RegExp.$2];
  }

  g.top ? g.ms = ms : module.exports = ms;
})(this);

A very nice little gem by Guiller.  Keep this function handy to save yourself from math expressions for time calculations!

Recent Features

  • By
    LightFace:  Facebook Lightbox for MooTools

    One of the web components I've always loved has been Facebook's modal dialog.  This "lightbox" isn't like others:  no dark overlay, no obnoxious animating to size, and it doesn't try to do "too much."  With Facebook's dialog in mind, I've created LightFace:  a Facebook lightbox...

  • By
    How I Stopped WordPress Comment Spam

    I love almost every part of being a tech blogger:  learning, preaching, bantering, researching.  The one part about blogging that I absolutely loathe:  dealing with SPAM comments.  For the past two years, my blog has registered 8,000+ SPAM comments per day.  PER DAY.  Bloating my database...

Incredible Demos

  • By
    Styling CSS Print Page Breaks

    It's important to construct your websites in a fashion that lends well to print. I use a page-break CSS class on my websites to tell the browser to insert a page break at strategic points on the page. During the development of my...

  • By
    Facebook Open Graph META Tags

    It's no secret that Facebook has become a major traffic driver for all types of websites.  Nowadays even large corporations steer consumers toward their Facebook pages instead of the corporate websites directly.  And of course there are Facebook "Like" and "Recommend" widgets on every website.  One...

Discussion

  1. Olmo

    Also note this has been accepted in MooTools More: https://github.com/mootools/mootools-more/pull/1098/files

  2. Ssss

    Whats with th ‘☃’ char?

    Have I missd something? xD

  3. Great one! Will definitely use this in my projects. Thanks a lot David!

  4. Hi David,

    First of all, nice site, I’ve been following you for the past 2 years or so.

    Yesterday Guille created a repo so that I could fork the code and make a pull request.
    Guille merged today my pull request because it’s a better rewrite overall:
    – Smaller footprint
    – 2.8x faster
    – Passes all unit tests

    The repo is here: https://github.com/guille/ms.js

    Could you update the article? It’d be great for everyone!

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!