UNPKG

masterblaster

Version:

Scheduling and componsation system for biodome

72 lines (58 loc) 1.81 kB
var later = require('later'); // use system time instead of UTC later.date.localTime(); function time() {}; /** * later.js text format */ time.validateTimeText = function(str) { // account for starting with desired time if (Number(str.substr(0,1)) >= 0) { str = "at " + str; } var parsed = later.parse.text(str); if (parsed.error === -1) return str; throw Error('Invalid time string: "' + str + '" at character ' + (parsed.error + 1)); }; time.textToSchedule = function(str) { return later.parse.text(str) }; time.durationToSchedule = function(start, duration) { var start = (typeof start == 'string') ? this.textToSchedule(start) : start , durationSeconds = this.convertDurationToSeconds(duration) , startTime = Date.parse(later.schedule(start).next().toUTCString()) , endDate = new Date(startTime + (durationSeconds * 1000)); return { schedules: [{ h: [endDate.getHours()], m: [endDate.getMinutes()], s: [endDate.getSeconds()] }] }; }; time.parseDuration = function(duration) { var match = duration.match(/^(\d{1,})\s(second|minute|hour)/); if (!match) return null; return { 'value' : Number(match[1]), 'unit' : match[2] }; }; time.convertDurationToSeconds = function(duration) { var parsed = this.parseDuration(duration) if (!parsed) return null; if (parsed.unit == 'second') { return parsed.value; } else if (parsed.unit == 'minute') { return parsed.value * 60; } else if (parsed.unit == 'hour') { return parsed.value * 60 * 60; } else { return null; } } time.repeatTimer = function(interval, callback) { return later.setInterval(callback, interval); }; time.singleCallTimer = function(interval, callback) { return later.setTimeout(callback, interval); } module.exports = time;