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
    Chris Coyier’s Favorite CodePen Demos

    David asked me if I'd be up for a guest post picking out some of my favorite Pens from CodePen. A daunting task! There are so many! I managed to pick a few though that have blown me away over the past few months. If you...

  • 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...

Incredible Demos

  • By
    iPhone Click Effect Using MooTools or jQuery

    One thing I love about love about Safari on the iPhone is that Safari provides a darkened background effect when you click a link. It's the most subtle of details but just enforces than an action is taking place. So why not implement that...

  • By
    MooTools Wall Plugin

    One of the more impressive MooTools plugins to hit the Forge recently was The Wall by Marco Dell'Anna.  The Wall creates an endless grid of elements which can be grabbed and dragged, fading in elements as they are encountered.  Let me show...

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!