(function ($) { $('#edit-start-date').after($('#edit-start-date-error')); $('#edit-end-date').after($('#edit-end-date-error')); $('#edit-retention-date').after($('#edit-retention-date-error')); $('.date_select').change(function() { dateCheck($(this)); }); function dateCheck(e) { var startValid = false, endValid = false, startValue = $('#edit-start-date').val(), endValue = $('#edit-end-date').val(); $('#edit-start-date-error').css('display', 'none'); $('#edit-end-date-error').css('display', 'none'); if (startValue) { startValid = isDate(startValue); if (!startValid) { $('#edit-start-date-error').css('display', 'block'); } } if (endValue) { endValid = isDate(endValue); if (!endValid) { $('#edit-end-date-error').css('display', 'block'); } } if (!startValid || !endValid) { $('#edit-retention-date').val(''); $('#edit-retention-date-error').css('display', 'none'); return false; } dateCalculation(); } function dateCalculation() { $('#edit-retention-date-error').css('display', 'none'); var start = new Date(Date.parse($('#edit-start-date').val())); var end = new Date(Date.parse($('#edit-end-date').val())); if (end < start) { $('#edit-retention-date').val(''); $('#edit-retention-date-error').css('display', 'block'); return false; } // Add 3 years to start date start.setFullYear(start.getFullYear() + 3); var startPlusThree = new Date(start); // Add 1 year to end date end.setFullYear(end.getFullYear() + 1); var endPlusOne = new Date(end), retention = new Date(startPlusThree > endPlusOne ? startPlusThree : endPlusOne), retentionDisplay = (retention.getMonth() + 1).toString().padStart(2,'0') + '/' + retention.getDate().toString().padStart(2, '0') + '/' + (retention.getFullYear()); $('#edit-retention-date').val(retentionDisplay); $('#edit-retention-date-error').css('display', 'none'); } function isDate(value) { var monthString = value.substring(0,2), dayString = value.substring(3,5), yearString = value.substring(6,10), month = parseInt(value.substring(0,2), 10), day = parseInt(value.substring(3,5), 10), year = parseInt(value.substring(6,10), 10), result = false, // Create date validations today = new Date(), curYear = today.getFullYear(), dayValidate = new RegExp("^$|^([1-9]|0[1-9]|[12][0-9]|3[01]$)"), monthValidate = new RegExp("^$|^([1-9]|0[1-9]|1[012]$)"), // Year validation: leave room to append "|" and years beyond 2020 yearValidate = "^$|^(19[6-9][0-9]|20[012][0-9]", monthLength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // Adjust month test for leap years. if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) { monthLength[1] = 29; } // Add additional years. let i = 2029; while (i < curYear) { yearValidate = yearValidate + "|" + i; i++; } yearValidate = new RegExp(yearValidate + ")$"); // Start verifying date. result = dayValidate.test(dayString) && monthValidate.test(monthString) && yearValidate.test(yearString) && (day > 0 && day <= monthLength[month - 1]); return result; } }(jQuery));