При работе с датами всегда лучше всего использовать доступные объекты Date. Приведенный ниже код сделает то, что вы просили, за исключением подробных ошибок о том, почему дата недействительна.
Если вам нужна более подробная ошибка, вы можете добавить ее в метод getValidDateObject ().
даты добавляются в массив по их значению в миллисекундах с полуночи 1 января 1970 года, который встроен в javascript согласно w3schools . Это позволяет правильно сортировать даты, а не сравнивать строки.
Далее, когда вы работаете с актуальными объектами даты, вы можете изменить метод getShortDateString (), чтобы он возвращался в любом формате, который вы пожелаете!
Блок HTML
Test Values<br />
<input type="text" name="date_1" class="dataList" value="2009-12-30">
<input type="text" name="date_2" class="dataList" value="2007-06-12">
<input type="text" name="date_3" class="dataList" value="2009-10-23">
<br />
Max Date
<input type="text" name="date_max" class="result" value="">
<br /><br />
<a href='javascript:getMax();'>Find Max Date</a>
Основная функция
function getMax(){
var dates = new Array();
var dateStrings = $('.dataList');
$.each(dateStrings , function(i, date){
var strDate = $(date).val();
var objDate = getValidDateObject(strDate);
if (!objDate){
$("input[name$='date_max']").val('0000-00-00');
throw new Error('Invalid Date: ' + strDate);
}
dates[i] = objDate.getTime();
});
dates.sort();
dates.reverse();
var d2 = new Date(dates[0]);
var maxDateString = getShortDateString(d2);
$("input[name$='date_max']").val(maxDateString);
}
Вернуть действительный объект Date
function getValidDateObject(strDate){
strDate = strDate.replace(/[-]/g,'/')
var objDate = new Date(strDate);
if (objDate == 'Invalid Date') {
alert('bad input: ' + strDate);
return false;
}
return objDate;
}
Возвращает отформатированную строку даты
function getShortDateString(objDate){
var y = objDate.getFullYear();
var m = objDate.getMonth() + 1;
var d = objDate.getDate();
if (m < 10) m = "0" + m;
if (d < 10) d = "0" + d;
var strDate = y + '-' + m + '-' + d;
return strDate;
}