mirror of
https://github.com/koalyptus/TableFilter.git
synced 2024-06-16 12:45:49 +02:00
160 lines
5.2 KiB
JavaScript
160 lines
5.2 KiB
JavaScript
define(["exports"], function (exports) {
|
|
"use strict";
|
|
|
|
/**
|
|
* Date utilities
|
|
*/
|
|
|
|
var DateHelper = {
|
|
isValid: function (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 (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;
|
|
}); |