К сожалению, способ Date.parse
не является надежным, даже для формата ISO.
Здесь ниже представлена быстрая однократная функция для анализа дат того формата, который вы используете в настоящее время.Если вам нравится, вы можете добавить некоторую проверку работоспособности, чтобы увидеть, находится ли этот день в пределах каждого месяца (не забывайте о leapyear, тогда :)), но если кто-то имеет разумный контроль над строками, которые он отправляет, это работает.
function parseThisYourVeryKnownFormatToDate(dateString /* '12/Jun/2010' */) {
function getMonthIdx(monthName) {
var months = {
'Jan':0, 'Feb':1, 'Mar':2, 'Apr':3, 'May':4, 'Jun':5
, 'Jul':6, 'Aug':7, 'Sep':8, 'Oct':9, 'Nov':10, 'Dec':11
};
return months[monthName];
}
var format = /^(\d+)\/(\w{3})\/(\d{4})$/;
var match = format.exec(dateString);
if (!match) {return undefined;}
var day = match[1], monthIdx = getMonthIdx(match[2]), year = match[3];
return new Date(year, monthIdx, day);
}
var testDates = ['10/Jan/2008', '15/Jun/1971', '31/Dec/1999', 'bogus/date/foo'];
for (var idx=0, len=testDates.length; idx<len; ++idx) {
console.log(parseThisYourVeryKnownFormatToDate(testDates[idx])); // real date objects, except for the last
}
var d0 = (parseThisYourVeryKnownFormatToDate('15/Apr/2009'));
var d1 = (parseThisYourVeryKnownFormatToDate('12/Apr/2009'));
console.log(d0+' is after '+d1+': '+(d0.getTime()>d1.getTime())); // says true
console.log(d1+' is after '+d0+': '+(d1.getTime()>d0.getTime())); // says false
console.log(d0+' is after '+d0+': '+(d0.getTime()>d0.getTime())); // says false