// Copyright (c) 2013-2017 Software AG, Darmstadt, Germany and/or Software AG USA Inc., Reston, VA, USA /* date value validation */ var day = 0; var month = 0; var year = 0; var leap; var state; var valid; var dayString; var yearString; var dateValue; var dateVal; var dateFormat; var sDate; var format; var delimiter; //main function function dateFormatChecker(dateVal, dateFormat) { if (dateVal == "") { return true; } var stateValidity = isDate(dateVal, dateFormat); if (stateValidity == true) { return true; } else { return false; } } // Checks the format function isDate(dateValue, format) { var caseValue = 0; if (format == "MM/DD/YYYY" || format == "MM/DD/RRRR") { caseValue = 1; delimiter = '/'; } else if (format == "MM-DD-YYYY" || format == "MM-DD-RRRR") { caseValue = 1; delimiter = '-'; } else if (format == "MM.DD.YYYY" || format == "MM.DD.RRRR") { caseValue = 1; delimiter = '.'; } else if (format == "MM/DD/YY") { caseValue = 4; delimiter = '/'; } else if (format == "DD/MM/YYYY") { caseValue = 2; delimiter = '/'; } else if (format == "DD-MM-YYYY" || format == "DD-MM-RRRR") { caseValue = 2; delimiter = '-'; } else if (format == "DD.MM.YYYY" || format == "DD.MM.RRRR") { caseValue = 2; delimiter = '.'; } else if (format == "DD/MM/YY") { caseValue = 5; delimiter = '/'; } else if (format == "YYYY/MM/DD") { caseValue = 3; delimiter = '/'; } else if (format == "YYYY-MM-DD" || format == "RRRR-MM-DD") { caseValue = 3; delimiter = '-'; } else if (format == "YYYY.MM.DD" || format == "RRRR.MM.DD") { caseValue = 3; delimiter = '.'; } else if (format == "DD-MON-YYYY") { caseValue = 6; delimiter = '-'; } else if (format == "YYYYMMDD") { caseValue = 7; delimiter = ''; } else { caseValue = 100; delimiter = '!'; } valid = isValid(caseValue, dateValue, delimiter); if(delimiter != ''){ var tempArray = dateValue.split(delimiter); if (tempArray.length != 3) { return false; } } return valid; } function isValid(n, sDateValue, sDelimiter) { switch (n) { case 1: var dArr = sDateValue.split(sDelimiter); //MM DD YYYY month = dArr[0]; day = dArr[1]; year = dArr[2]; break; case 2: var dArr = sDateValue.split(sDelimiter); //DD MM YYYY day = dArr[0]; month = dArr[1]; year = dArr[2]; break; case 3: var dArr = sDateValue.split(sDelimiter); //YYYY MM DD year = dArr[0]; month = dArr[1]; day = dArr[2]; break; case 4: var dArr = sDateValue.split(sDelimiter); //MM/DD/YY month = dArr[0]; day = dArr[1]; year = "20" + dArr[2]; break; case 5: var dArr = sDateValue.split(sDelimiter); //DD/MM/YY day = dArr[0]; month = dArr[1]; year = "20" + dArr[2]; break; case 6: var dArr = sDateValue.split(sDelimiter); //DD-MON-YYYY day = dArr[0]; month = dArr[1]; year = dArr[2]; state = monthList(day, month, year); return state; //break; case 7: year = sDateValue.substr(0,4); //YYYYMMDD month = sDateValue.substr(4,2); day = sDateValue.substr(6,2); break; case 100: return false; // invalid format } var vState = valueValidator(day, month, year); if (vState == false) { return false; } else { state = dateValid(day, month, year); return state; } } //checks day,month,year seperately for invalid characters function valueValidator(vDay, vMonth, vYear) { if (month == undefined || day == undefined || year == undefined) { return false; } var numeric1 = IsNumeric(day); if (numeric1 == false) { return false; } var numeric2 = IsNumeric(month); if (numeric2 == false) { return false; } var numeric3 = IsNumeric(year); if (numeric3 == false) { return false; } return true; } // checks if the String entered contains alphabets or special characters.... function IsNumeric(sDate) { var ValidChars = "0123456789"; var Char; var IsNumber = true; if (sDate == undefined || sDate == null || sDate == 0) { return false; } else { for (i = 0; i < sDate.length && IsNumber == true; i++) { Char = sDate.charAt(i); if (ValidChars.indexOf(Char) == - 1) { IsNumber = false; return IsNumber; } } return IsNumber; } } //checks if the entered day,month & year is valid.... function dateValid(day, month, year) { if (month.length == 1) // if date or month is single valued, { month = "0" + month; } // '0' is added to it as prefix..... if (day.length == 1) // date & month are converted to standard format. { day = "0" + day; } //Day cannot be less than 1 if (day < 1 || day > 31) { return false; } // Month should be 1<=Month<=12 if ((month < 1) || (month > 12)) { return false; } if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12") )) { return false; } if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) { return false; } if ((year == 0) || (year.length > 4)) { return false; } // Checks the Leap Year if ((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0)) { leap = 1; } else { leap = 0; } if ((month == 2) && (leap == 1) && (day > 29)) { return false; } if ((month == 2) && (leap != 1) && (day > 28)) { return false; } return true; } // for case :12 for validating DD-MON-YYYY format function monthList(day, month, year) { if (day == undefined || month == undefined || year == undefined) { return false; } if (day.length == 1) { day = "0" + day; } var numericDay = IsNumeric(day); if (numericDay == false) { return false; } var numericYear = IsNumeric(year); if (numericYear == false) { return false; } if ("JAN" == upperCase(month)) { month = "01"; } else if ("FEB" == upperCase(month)) { month = "02"; } else if ("MAR" == upperCase(month)) { month = "03"; } else if ("APR" == upperCase(month)) { month = "04"; } else if ("MAY" == upperCase(month)) { month = "05"; } else if ("JUN" == upperCase(month)) { month = "06"; } else if ("JUL" == upperCase(month)) { month = "07"; } else if ("AUG" == upperCase(month)) { month = "08"; } else if ("SEP" == upperCase(month)) { month = "09"; } else if ("OCT" == upperCase(month)) { month = "10"; } else if ("NOV" == upperCase(month)) { month = "11"; } else if ("DEC" == upperCase(month)) { month = "12"; } else { return false; } var case12 = dateValid(day, month, year); return case12; } function upperCase(arg) { return (arg.toUpperCase()); } function validateTSFormat(dateVal, dateFormat, dataPrecision){ if(dateVal.length > 0){ var dateStr = dateVal.split(' '); if(!dateFormatChecker(dateStr[0], dateFormat)){ return false; } var TSStr = dateStr[1]; if(!validateTSString(TSStr.replace(' ',''), dataPrecision)){ return false; }else{ return true; } }else{ return true; } } //00:00:00.000000000 function validateTSString(TSStr, dataPrecision){ var TSDataArray = TSStr.split(":"); if(isValidPositiveNumber(TSDataArray[0]) && TSDataArray[0]<60 && isValidPositiveNumber(TSDataArray[1]) && TSDataArray[1]<60 ){ var TS3 = TSDataArray[2].split("."); if(isValidPositiveNumber(TS3[0]) && TS3[0]<60 && isValidPositiveNumber(TS3[1])){ if(TS3[1] != null){ var valueBeyondPrecision = TS3[1].substring(dataPrecision, TS3[1].length); if(valueBeyondPrecision > 0){ return false; } } return true; }else{ return false; } }else{ return false; } } function isValidPositiveNumber (s){ var bag = "0123456789"; var i; var vCheck = false; if(s!=null){ for (i = 0; i < s.length; i++){ var c = s.charAt(i); if (bag.indexOf(c) == -1) return false; } }else{ return false; } return true; }