compromise
Version:
natural language processing in the browser
63 lines (58 loc) • 1.25 kB
JavaScript
;
//
const isHour = (num) => {
if (num && num > 0 && num < 25) {
return true;
}
return false;
};
const isMinute = (num) => {
if (num && num > 0 && num < 60) {
return true;
}
return false;
};
const parseTime = (r) => {
let result = {
logic: null,
hour: null,
minute: null,
second: null,
timezone: null
};
let logic = r.match('(by|before|for|during|at|until|after) #Time').firstTerm();
if (logic.found) {
result.logic = logic.normal();
}
let time = r.match('#Time');
time.forEachTerms((t) => {
//3pm
let m = t.text.match(/([12]?[0-9]) ?(am|pm)/i);
if (m) {
result.hour = parseInt(m[1], 10);
if (m[2] === 'pm') {
result.hour += 12;
}
if (!isHour(result.hour)) {
result.hour = null;
}
}
//3:15
m = t.text.match(/([12]?[0-9]):([0-9][0-9]) ?(am|pm)?/i);
if (m) {
result.hour = parseInt(m[1], 10);
result.minute = parseInt(m[2], 10);
if (!isMinute(result.minute)) {
result.minute = null;
}
if (m[3] === 'pm') {
result.hour += 12;
}
if (!isHour(result.hour)) {
result.hour = null;
}
}
});
return result;
};
module.exports = parseTime;