masterblaster
Version:
Scheduling and componsation system for biodome
72 lines (58 loc) • 1.81 kB
JavaScript
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;