Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

atoyansk

Meses

Recommended Posts

Consegui fazer uma máscara para formato de data, onde o usuário digita 00000000 e formata automaticamente para 00/00/0000. É o seguinte:

<script language="javascript"> function MascaraDATA (formato, keypress, objeto) { campo = eval (objeto); if (formato=='DATA')  {  caracteres = '01234567890';  separacoes = 2;  separacao1 = '/';  separacao2 = '/';  conjuntos = 3;  conjunto1 = 2;  conjunto2 = 3;  conjunto3 = 4; if ((caracteres.search(String.fromCharCode (keypress))!=-1) && campo.value.length <   (conjunto1 + conjunto2 + conjunto3 + 2))  {  if (campo.value.length == conjunto1)  campo.value = campo.value + separacao1;  if (campo.value.length == conjunto1 + conjunto2)  campo.value = campo.value + separacao2;  }  else    event.returnValue = false;  } }</script>

E para retornar

<input name="data" type="text" id="data" size="20" maxlength="10" onKeyPress="MascaraDATA('DATA', window.event.keyCode, 'document.form.data');">

Apesar da "gambiarra" no conjunto 2 para que ele inserisse a barra no local exato, deu certo.Porém, quero que o mês ( conjunto 2) seja digitado apenas entre os números 01 a 12. Como fazer?Agradeço as respostas.Airton Toyansk.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui fazer uma máscara para formato de data, onde o usuário digita 00000000 e formata automaticamente para 00/00/0000. É o seguinte:

<script language="javascript"> function MascaraDATA (formato, keypress, objeto) { campo = eval (objeto); if (formato=='DATA')  {  caracteres = '01234567890';  separacoes = 2;  separacao1 = '/';  separacao2 = '/';  conjuntos = 3;  conjunto1 = 2;  conjunto2 = 3;  conjunto3 = 4; if ((caracteres.search(String.fromCharCode (keypress))!=-1) && campo.value.length <   (conjunto1 + conjunto2 + conjunto3 + 2))  {  if (campo.value.length == conjunto1)  campo.value = campo.value + separacao1;  if (campo.value.length == conjunto1 + conjunto2)  campo.value = campo.value + separacao2;  }  else    event.returnValue = false;  } }</script>

E para retornar

<input name="data" type="text" id="data" size="20" maxlength="10" onKeyPress="MascaraDATA('DATA', window.event.keyCode, 'document.form.data');">

Apesar da "gambiarra" no conjunto 2 para que ele inserisse a barra no local exato, deu certo.Porém, quero que o mês ( conjunto 2) seja digitado apenas entre os números 01 a 12. Como fazer?Agradeço as respostas.Airton Toyansk.
mto legal esse codigo atoyansk, eu havia feito um semelhante mas tava dando pau qdo pressionava o backspace. Bom, só reinterando o codigo, você esqueceu de colocar a tag de form entre o input pois senão o script nao encontra o input FORM.DATA , segue abaixo como deveria ficar o input

<FORM NAME="form"><input name="data" type="text" id="data" size="20" maxlength="10" onKeyPress="MascaraDATA('DATA', window.event.keyCode, 'document.form.data');"></FORM>

Agora sobre a validação do mes fiz a seguinte função

function validaMes(campo){  mes = campo.value  str = eval(mes.substring(3,5))  tam = campo.value.length  if (tam < 10) {    alert('Insira a Data no formato (dd/mm/aaaa)')    campo.focus()  } else {    if (str > 12 || str == 00){      alert('Mes [' + str + '] inválido')      campo.focus()    }  }}

ela verificará se o valor da data esta na forma (dd/mm/aaaa) . Se retornar falso, solta um alerta dizendo que o campo esta preenchido da forma incorreta (ja que muitos costumam usar dd/mm/aa). Se tiver ok ele verifica o campo de mes da data, para que não seja nem 00 e nem maior que 12. AH! e para a verificação usei o onBlur, já que o usuário não deve sair do campo sem preencher a data correta!O código do input agora fica assim:

<FORM NAME="form"><input name="data" type="text" id="data" size="20" maxlength="10" onKeyPress="MascaraDATA('DATA', window.event.keyCode, 'document.form.data');" onBlur="validaMes(this)"></FORM>

Ah, e pq veriicar só o mês sendo que o dia tb pode não bater com o mês? isso dá um sério problema ao inserir no Banco de Dados se o campo for Date/Time. segue abaixo um código que valida a data completa. Ah, fiz esse código meio correndo, entao se alguem tiver um mais enxuto, colokae!

function ValidaData(valor){  var verifica  vardata = valor.value  tam = valor.value.length  if (tam == 10) {    dia = vardata.substring(0,2)    sep1 = vardata.substring(2,3)    mes = vardata.substring(3,5)    sep2 = vardata.substring(5,6)    ano = vardata.substring(6,10)    erro = 'Ocorreu o seguinte erro na Data:\n '    if (tam==8) {      valor.focus()      alert('Preencha a Data corratemente\n [ DD/MM/AAAA ]')    } else {    if (mes > 12){      erro = erro + '- Mês Inválido'      verifica = 'false'    }      if (mes==01||mes==03||mes==05||mes==07||mes==08||mes==10||mes==12){      if (dia > 31) {        erro = erro + '- Dia Inválido para o respectivo mês'        verifica = 'false'      }    } else if (mes== 04 || mes==06 || mes==10 || mes==11){      if (dia > 30){        erro = erro + '- Dia Inválido para o respectivo mês'        verifica = 'false'      }    } else if (mes==02) {      if (dia > 28) {        erro = erro + '- Dia Inválido para o respectivo mês'        verifica = 'false'      }    }   }   if(verifica == 'false'){    erro = erro + '\nPreencha novamente'    alert(erro)    valor.focus()  }} else {  alert("Por favor,\nPreencha a data corretamente,\nno formato (dd/mm/aaaa)")}}

Bom é isso ae!Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala tebba, beleza?Me explica uma coisa: este último código que você colocou aí, como ele faz referência ao campo de nome "data"? Será que se eu copiar e colar, do jeito que está aí, acrescentado ao código que eu já tenho, irá funcionar?Estou perguntando porque tentei antes um código parecido a esse e ele nunca validava a data, só retornando erro. Isso acontecia mesmo antes de ser digitado qualquer valor, bastava acessar o formulário.Abraço,Airton Toyansk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Que distração a minha! É no Input... onBlur="ValidaData(this)">Valeu mesmo Tebba!!!!

E aí Atoyansk, deu certo aí?Oh, se faltou algo ou não rodar dá um toque aí que fazemos um bem bolado!Espero que ajudem a todos do Forum!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.