UNPKG

pimatic

Version:

A home automation server and framework for the Raspberry PI running on node.js

64 lines (53 loc) 1.75 kB
// ****************************************************************** // Format keyword // ****************************************************************** var Errors = require('../../../../errors.js') , core = require('../../core.js') ; module.exports = function(config) { var errors = []; var valid = false; var match = config.inst.match(core.FORMAT_REGEXPS['date-time']); if (match) { var year = parseInt(match[1], 10); var month = parseInt(match[2], 10); var mday = parseInt(match[3], 10); var hour = parseInt(match[4], 10); var min = parseInt(match[5], 10); var sec = parseInt(match[6], 10); if ( month >= 1 && month <= 12 && mday >= 1 && mday <= 31 && hour >= 0 && hour <= 23 && min >= 0 && min <= 59 && sec >= 0 && sec <= 60 // it’s 60 during a leap second ) { var d = new Date(year, (month - 1) + 1); // the next month var lastDay = new Date(d - 86400000); if (mday <= lastDay.getDate()) { // [day-of-month is valid] if (match[10]) { var offsetHour = parseInt(match[10], 10); var offsetMin = parseInt(match[11], 10); if ( offsetHour >=0 && offsetHour <= 23 && offsetMin >= 0 && offsetMin <= 59 ) { valid = true; } } else { valid = true; } } } } if (!valid) { var desc = 'not a valid date-time per RFC 3339 section 5.6 ' + '(use "date" for date-only or "time" for time-only)'; errors.push(new Errors.FormatValidationError(config.resolutionScope, config.instanceContext, 'format', 'date-time', config.inst, desc)); } return errors; };