JSFiddle - React, Tailwind, and code Playground

by blesh

JavaScript

var HOUR = 3.6e10,
    MIN = 60000,
    SEC = 1000;

function TimeSpan(h, m, s, ms) {
    if (arguments.length === 1) {
        ms = arguments[0];
        h = m = s = 0;
    } else {
        m = m || 0;
        s = s || 0;
        ms = ms || 0;
    }
    var self = this,
        _value = (h * HOUR) + (m * MIN) + (s * SEC) + ms;

    //update h, m, s:
    h = ~~(_value / HOUR);
    m = ~~((_value % HOUR) / MIN);
    s = ~~((_value % MIN) / SEC);
    ms = _value % SEC;
    
    self.hours = function () {
        return h;
    };
    
    self.minutes = function () {
        return m;
    };
    
    self.seconds = function (){
        return s;
    };
    
    self.milliseconds = function (){
        return ms;
    };
    
    self.valueOf = function (){
        return _value;
    };
    
    self.toString = function (){
        return pad(h, 2) + ':' + pad(m, 2) + ':' + pad(s, 2) + '.' + pad(ms, 3);
    };
    
    self.add = function(ts) {
        return new TimeSpan(self + ts);
    };
    
    self.addSeconds = function(m) {
        return self.add(m * SEC);
    };
    
    self.addHours = function(h) {
        return self.add(m * HOUR);
    };
    
    self.addMinutes = function(m) {
        return self.add(m * MIN);
    };
    
    function pad(n, size) {
        n = ''+n;
        while(n.length < size) {
            n = '0' + n;
        }
        return n;
    }
};

console.clear();
var ts = new TimeSpan(1, 2, 3, 4);
var ts2 = new TimeSpan(1, 2, 3, 4);
var ts3 = ts.addMinutes(2);
console.log(ts3.toString());