Desejo validar o formato da data em uma entrada usando o formato mm/dd/yyyy
.
Encontrei os códigos abaixo em um site e usei-os, mas não funciona:
function isDate(ExpiryDate) {
var objDate, // date object initialized from the ExpiryDate string
mSeconds, // ExpiryDate in milliseconds
day, // day
month, // month
year; // year
// date length should be 10 characters (no more no less)
if (ExpiryDate.length !== 10) {
return false;
}
// third and sixth character should be '/'
if (ExpiryDate.substring(2, 3) !== '/' || ExpiryDate.substring(5, 6) !== '/') {
return false;
}
// extract month, day and year from the ExpiryDate (expected format is mm/dd/yyyy)
// subtraction will cast variables to integer implicitly (needed
// for !== comparing)
month = ExpiryDate.substring(0, 2) - 1; // because months in JS start from 0
day = ExpiryDate.substring(3, 5) - 0;
year = ExpiryDate.substring(6, 10) - 0;
// test year range
if (year < 1000 || year > 3000) {
return false;
}
// convert ExpiryDate to milliseconds
mSeconds = (new Date(year, month, day)).getTime();
// initialize Date() object from calculated milliseconds
objDate = new Date();
objDate.setTime(mSeconds);
// compare input date and parts from Date() object
// if difference exists then date isn't valid
if (objDate.getFullYear() !== year ||
objDate.getMonth() !== month ||
objDate.getDate() !== day) {
return false;
}
// otherwise return true
return true;
}
function checkDate(){
// define date string to test
var ExpiryDate = document.getElementById(' ExpiryDate').value;
// check date and print message
if (isDate(ExpiryDate)) {
alert('OK');
}
else {
alert('Invalid date format!');
}
}
Alguma sugestão sobre o que pode estar errado?
javascript
validation
date
mate
fonte
fonte
{}
botão da barra de ferramentas. Eu fiz isso por você neste momento. Além disso, tente fornecer algumas informações sobre o seu problema: uma descrição não funciona é útil como uma solução para corrigi-lo .Respostas:
Acho que Niklas tem a resposta certa para o seu problema. Além disso, acho que a seguinte função de validação de data é um pouco mais fácil de ler:
fonte
parseInt(parts[0], 10)
. Caso contrário, o de setembro09
é lido como um octal e analisa para 0Eu usaria Moment.js para validação de data.
Jsfiddle: http://jsfiddle.net/q8y9nbu5/
true
valor é para análise estrita de crédito para @Andrey Prokhorov, o que significafonte
Use a seguinte expressão regular para validar:
Isso está funcionando para mim para MM / dd / aaaa.
fonte
Todos os créditos vão para elian-ebbing
Aqui, apenas para os preguiçosos, também ofereço uma versão personalizada da função para o formato aaaa-mm-dd .
fonte
/^(19|20)\d\d$/
, o mês com/^(0[0-9]|1[0-2])$/
e o dia com/^(0[1-9]|[12][0-9]|3[01])$/
antes da análise. Então funcionou, obrigado./^\d{4}\-\d{1,2}\-\d{1,2}$/
validará aaaa-mm-dd ou aaaa-md como verdadeiro, portanto, valida apenas o comprimento e não cada parte individual da data. Para o comprimento preciso de aaaa-mm-dd sem verificar se o ano, mês e data estão corretos, use/^\d{4}\-\d{2}\-\d{2}$/
.Você poderia usar
Date.parse()
Você pode ler na documentação do MDN
E verifique se o resultado de
Date.parse
isNaNPor favor, dê uma olhada quando é recomendado o uso
Date.parse
em MDNfonte
Parece estar funcionando bem para datas de formato mm / dd / aaaa, exemplo:
http://jsfiddle.net/niklasvh/xfrLm/
O único problema que tive com seu código foi o fato de que:
Tinha um espaço entre colchetes, antes do ID do elemento. Alterou para:
Sem mais detalhes sobre o tipo de dados que não está funcionando, não há muito mais para fornecer informações.
fonte
A função retornará verdadeiro se a string fornecida estiver no formato correto ('MM / DD / AAAA'), caso contrário, retornará falso. (Encontrei este código online e modifiquei um pouco)
fonte
Aqui está um snippet para verificar a data válida:
fonte
Tudo bem se você quiser verificar a validação de dd / MM / aaaa
fonte
Encontre no código abaixo que permite realizar a validação de data para qualquer um dos formatos fornecidos para validar as datas de início / início e término / até. Poderia haver algumas abordagens melhores, mas descobrimos isso. Observe que o formato de data fornecido e a string de data andam de mãos dadas.
Abaixo está o snippet de HTML
fonte
Retirei a maior parte desse código de outro post encontrado aqui . Eu o modifiquei para meus propósitos. Isso funciona bem para o que preciso. Isso pode ajudar na sua situação.
fonte
Semelhante à resposta Elian Ebbing, mas suporta delimitadores "\", "/", ".", "-", ""
fonte
fonte
O momento é realmente bom para resolvê-lo. Não vejo razão para adicionar complexidade apenas para verificar a data ... dê uma olhada no momento: http://momentjs.com/
HTML:
Roteiro :
fonte
A data da primeira string é convertida para o formato de data js e convertida para o formato de string novamente, depois é comparada com a string original.
fonte
fonte
É incomum ver um post tão antigo sobre um tema tão básico, com tantas respostas, nenhuma delas certa. (Não estou dizendo que nenhum deles funciona.)
Date.parse()
não deve ser usado para strings de datas locais. MDN diz "Não é recomendado usar Date.parse porque até ES5, a análise de strings era totalmente dependente da implementação." O padrão requer uma string ISO 8601 (potencialmente simplificada); o suporte para qualquer outro formato depende da implementação.new Date(string)
ser usado, porque usa Date.parse ().Esta é uma solução eficiente e concisa, sem conversões implícitas. Ele aproveita a disposição do construtor de Date de interpretar 29/14/2018 como 01/03/2019. Ele usa alguns recursos de linguagem modernos, mas eles são facilmente removidos se necessário. Também incluí alguns testes.
fonte
Javascript
JQuery
retorna verdadeiro para uma string de data válida.
fonte
retorna o literal
'Invalid Date'
para qualquer string_de_data inválida.Nota: Por favor, veja o comentário abaixo.
fonte
new Date("02-31-2000")
dáThu Mar 02 2000 00:00:00 GMT-0300 (BRT)
.