define(['exports'], function (exports) { /** * Date utilities */ 'use strict'; var DateHelper = { isValid: function isValid(dateStr, format) { if (!format) { format = 'DMY'; } format = format.toUpperCase(); if (format.length != 3) { if (format === 'DDMMMYYYY') { var d = this.format(dateStr, format); dateStr = d.getDate() + '/' + (d.getMonth() + 1) + '/' + d.getFullYear(); format = 'DMY'; } } if (format.indexOf('M') === -1 || format.indexOf('D') === -1 || format.indexOf('Y') === -1) { format = 'DMY'; } var reg1, reg2; // If the year is first if (format.substring(0, 1) == 'Y') { reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/; reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/; } else if (format.substring(1, 2) == 'Y') { // If the year is second reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/; reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/; } else { // The year must be third reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/; reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/; } // If it doesn't conform to the right format (with either a 2 digit year or // 4 digit year), fail if (reg1.test(dateStr) === false && reg2.test(dateStr) === false) { return false; } // Split into 3 parts based on what the divider was var parts = dateStr.split(RegExp.$1); var mm, dd, yy; // Check to see if the 3 parts end up making a valid date if (format.substring(0, 1) === 'M') { mm = parts[0]; } else if (format.substring(1, 2) === 'M') { mm = parts[1]; } else { mm = parts[2]; } if (format.substring(0, 1) === 'D') { dd = parts[0]; } else if (format.substring(1, 2) === 'D') { dd = parts[1]; } else { dd = parts[2]; } if (format.substring(0, 1) === 'Y') { yy = parts[0]; } else if (format.substring(1, 2) === 'Y') { yy = parts[1]; } else { yy = parts[2]; } if (parseInt(yy, 10) <= 50) { yy = (parseInt(yy, 10) + 2000).toString(); } if (parseInt(yy, 10) <= 99) { yy = (parseInt(yy, 10) + 1900).toString(); } var dt = new Date(parseInt(yy, 10), parseInt(mm, 10) - 1, parseInt(dd, 10), 0, 0, 0, 0); if (parseInt(dd, 10) != dt.getDate()) { return false; } if (parseInt(mm, 10) - 1 != dt.getMonth()) { return false; } return true; }, format: (function (_format) { function format(_x, _x2) { return _format.apply(this, arguments); } format.toString = function () { return _format.toString(); }; return format; })(function (dateStr, format) { if (!format) { format = 'DMY'; } if (!dateStr || dateStr === '') { return new Date(1001, 0, 1); } var oDate, parts; function y2kDate(yr) { if (yr === undefined) { return 0; } if (yr.length > 2) { return yr; } var y; //>50 belong to 1900 if (yr <= 99 && yr > 50) { y = '19' + yr; } //<50 belong to 2000 if (yr < 50 || yr === '00') { y = '20' + yr; } return y; } function mmm2mm(mmm) { if (mmm === undefined) { return 0; } var mondigit; var MONTH_NAMES = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december', 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']; for (var m_i = 0; m_i < MONTH_NAMES.length; m_i++) { var month_name = MONTH_NAMES[m_i]; if (mmm.toLowerCase() === month_name) { mondigit = m_i + 1; break; } } if (mondigit > 11 || mondigit < 23) { mondigit = mondigit - 12; } if (mondigit < 1 || mondigit > 12) { return 0; } return mondigit; } switch (format.toUpperCase()) { case 'DDMMMYYYY': parts = dateStr.replace(/[- \/.]/g, ' ').split(' '); oDate = new Date(y2kDate(parts[2]), mmm2mm(parts[1]) - 1, parts[0]); break; case 'DMY': parts = dateStr.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/, '$1 $3 $5').split(' '); oDate = new Date(y2kDate(parts[2]), parts[1] - 1, parts[0]); break; case 'MDY': parts = dateStr.replace(/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/, '$1 $3 $5').split(' '); oDate = new Date(y2kDate(parts[2]), parts[0] - 1, parts[1]); break; case 'YMD': parts = dateStr.replace(/^((\d\d)?\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/, '$1 $4 $6').split(' '); oDate = new Date(y2kDate(parts[0]), parts[1] - 1, parts[2]); break; default: //in case format is not correct parts = dateStr.replace(/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/, '$1 $3 $5').split(' '); oDate = new Date(y2kDate(parts[2]), parts[1] - 1, parts[0]); break; } return oDate; }) }; exports.DateHelper = DateHelper; }); //# sourceMappingURL=date.js.map