2013-06-06 6 views
0

Обратите внимание, что это похоже на вопрос, который задают много раз, но почему-то я не могу получить наиболее распространенное решение для работы. Большинство ответов вращаются вокруг решения, как этот:Подтвердить дату в Javascript

function isValidDate(){ 
    var dateString = '2001/24/33'; 
    return !isNaN(Date.parse(dateString)); 
} 

В Firefox это возвращает ложь, как результат этого Date.parse является числом; 1041462000000.

Как исправить это ..?

+0

'return (Date.parse (dateString)> 0);'? –

+2

Я думаю, что это 'isNaN()' not 'isNan()'. – NINCOMPOOP

+0

@ TheNewIdiot правильно, но это была опечатка, и проблема в том, что в части синтаксиса, на мой взгляд, – Maarten

ответ

2

Хороший способ сделать это - создать новый объект даты на основе строки и сравнить результат этого объекта со строкой ввода. Если это не одно и то же, дата была недействительной, и JS сделал резервную копию в более близкую (действительную) дату. Нечто подобное:

function isValidDate(str){ 
    var split = str.split('/'); 
    var date = new Date(split[0], split[1]-1, split[2]); 

    return (date.getFullYear() == split[0] && date.getMonth()+1 == split[1] && date.getDate() == split[2]); 
} 

вызова с:

var isValid = isValidDate('2001/24/33'); 

Примечания: в этом случае предполагается, что входная строка, чтобы быть в определенном формате. Если вы уверены, что это всегда один и тот же формат, это не проблема. Если нет, то вам нужна работа над этим кодом.

В качестве опоры: используйте moment.js, если вам нужно провести обширные операции с датой.

+2

Проблема в том, что класс 'Date' принимает несколько разных форматов для создания. Так что это не будет работать все время. –

+0

@Cobra_Fast, поскольку я могу форматировать дату, но мне нравится, в моем случае преобразовать ее из «dd-mm-yyyy» в «yyyy/mm/dd» перед ее обработкой, будет ли решение Baszz работать во всех браузерах? – Maarten

+0

@Maarten Да, если вы можете быть на 100% уверены, что формат ввода, то он будет работать. –

Смежные вопросы