1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-05-15 21:06:44 +02:00
TableFilter/dev/date.js
2015-05-13 20:54:29 +10:00

172 lines
6.6 KiB
JavaScript

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