Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, beleza?
Estou com o seguinte problema, preciso comparar duas datas através do javascript e teria que funcionar assim: Após fazer a verificação das datas ao clicar no campo sequinte, se encontra-se alguma irregularidade apareceria um alert, eu vi um exemplo , mas não soube adapta-lo ao meu código peço a vocês q me ajudem, desde já agradeço.
O exemplo que eu achei foi esse:
<script language="JavaScript1.1" type="text/javascript" defer="defer">// Função que monta a data no formato correto para compará-lafunction montaData( p_data ) { var diasMeses = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); var v_exp = /(0?[1-9]|[12][0-9]|3[01])[\-\/](1[0-2]|0?[1-9])[\-\/]((19|20)?\d{2})$/; if ( v_exp.test( p_data ) ) { var v_data = v_exp.exec( p_data ); var v_dia = v_data[ 1 ]; var v_mes = v_data[ 2 ]; var v_ano = ( v_data[ 4 ] ) ? v_data[ 3 ] : '19' + v_data[ 3 ]; diasMeses[2] = ( ( v_ano % 400 == 0 ) || (( v_ano % 4 == 0 ) && ( v_ano % 100 != 0 )) ) ? 29 : 28; :wacko: if ( v_dia <= diasMeses[ v_mes ] ) return [ v_dia, v_mes, v_ano ]; } return null;} // Função que faz a comparação mesmofunction comparaData( p_dtPrim, p_dtSeg, p_oper ) { var v_prim = montaData( p_dtPrim ); var v_seg = montaData( p_dtSeg ); p_oper = ( p_oper ) ? p_oper : '<'; if ( !v_prim || !v_seg ) return false; var v_data1 = v_prim[ 2 ] + v_prim[ 1 ] + v_prim[ 0 ]; var v_data2 = v_seg[ 2 ] + v_seg[ 1 ] + v_seg[ 0 ]; var v_result = eval(v_data1 + p_oper + v_data2); return v_result;}</script>
Eu tentei modificar assim:
<script language="JavaScript1.1" type="text/javascript" defer="defer">// Função que monta a data no formato correto para compará-lafunction montaData( p_data ) { var diasMeses = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); var v_exp = /(0?[1-9]|[12][0-9]|3[01])[\-\/](1[0-2]|0?[1-9])[\-\/]((19|20)?\d{2})$/; if ( v_exp.test( p_data ) ) { var v_data = v_exp.exec( p_data ); var v_dia = v_data[ 1 ]; var v_mes = v_data[ 2 ]; var v_ano = ( v_data[ 4 ] ) ? v_data[ 3 ] : '19' + v_data[ 3 ]; diasMeses[2] = ( ( v_ano % 400 == 0 ) || (( v_ano % 4 == 0 ) && ( v_ano % 100 != 0 )) ) ? 29 : 28; if ( v_dia <= diasMeses[ v_mes ] ) return [ v_dia, v_mes, v_ano ]; } return null;} // Função que faz a comparação mesmofunction comparaData( textdata_entrada, textdata_saida, p_oper ) { var v_prim = montaData( textdata_entrada ); var v_seg = montaData( textdata_saida ); p_oper = ( p_oper ) ? p_oper : '<'; if ( !v_prim || !v_seg ) return false; var v_data1 = v_prim[ 2 ] + v_prim[ 1 ] + v_prim[ 0 ]; var v_data2 = v_seg[ 2 ] + v_seg[ 1 ] + v_seg[ 0 ]; var v_result = eval(v_data1 + p_oper + v_data2); return v_result;}if (v_data1 <= v_data2) { alert('Datas estão certas!'); return true; } else { alert('ATENÇÃO: Data de saída é menor que data de entrada'); document.all.textdata_entrada.final.focus(); document.all.textdata_saida.final.select(); return false; }</script> :wacko:>
if (comparaData( data1, data2, '<=' ) alert('Datas estão certas!');else alert('ATENÇÃO: Data de saída é menor que data de entrada');Obs.: Use a função original.Abraços, T+
Putz, desculpe a ignorância mas onde coloco os if com os alert q você me passou?Preciso colocar os algum código nos campos da data? eu fiz assim: dá uma corrigida ae se for possível... valeu!<script language="JavaScript1.1" type="text/javascript" defer="defer">// Função que monta a data no formato correto para compará-lafunction montaData( p_data ) { var diasMeses = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); var v_exp = /(0?[1-9]|[12][0-9]|3[01])[\-\/](1[0-2]|0?[1-9])[\-\/]((19|20)?\d{2})$/; if ( v_exp.test( p_data ) ) { var v_data = v_exp.exec( p_data ); var v_dia = v_data[ 1 ]; var v_mes = v_data[ 2 ]; var v_ano = ( v_data[ 4 ] ) ? v_data[ 3 ] : '19' + v_data[ 3 ]; diasMeses[2] = ( ( v_ano % 400 == 0 ) || (( v_ano % 4 == 0 ) && ( v_ano % 100 != 0 )) ) ? 29 : 28;:wacko: if ( v_dia <= diasMeses[ v_mes ] ) return [ v_dia, v_mes, v_ano ]; } return null;} // Função que faz a comparação mesmofunction comparaData( textdata_entrada, textdata_saida, p_oper ) { var v_prim = montaData( textdata_entrada ); var v_seg = montaData( textdata_saida ); p_oper = ( p_oper ) ? p_oper : '<'; if ( !v_prim || !v_seg ) return false; var v_data1 = v_prim[ 2 ] + v_prim[ 1 ] + v_prim[ 0 ]; var v_data2 = v_seg[ 2 ] + v_seg[ 1 ] + v_seg[ 0 ]; var v_result = eval(v_data1 + p_oper + v_data2); return v_result;}{if (comparaData( v_data1, v_data2, '<=' ) alert('Datas estão certas!'); return true; else alert('ATENÇÃO: Data de saída é menor que data de entrada'); return false;}</script>Use isso entre as tags <head> e </head>
<script>function verifica () { if (comparaData( v_data1, v_data2, '<=' )) alert('Datas estão certas!'); else { alert('ATENÇÃO: Data de saída é menor que data de entrada'); document.MeuForm.MeuCampo.focus(); }}// Função que monta a data no formato correto para compará-lafunction montaData( p_data ) { var diasMeses = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); var v_exp = /(0?[1-9]|[12][0-9]|3[01])[\-\/](1[0-2]|0?[1-9])[\-\/]((19|20)?\d{2})$/; if ( v_exp.test( p_data ) ) { var v_data = v_exp.exec( p_data ); var v_dia = v_data[ 1 ]; var v_mes = v_data[ 2 ]; var v_ano = ( v_data[ 4 ] ) ? v_data[ 3 ] : '19' + v_data[ 3 ]; diasMeses[2] = ( ( v_ano % 400 == 0 ) || (( v_ano % 4 == 0 ) && ( v_ano % 100 != 0 )) ) ? 29 : 28;:wacko: if ( v_dia <= diasMeses[ v_mes ] ) return [ v_dia, v_mes, v_ano ]; } return null;} // Função que faz a comparação mesmofunction comparaData( p_dtPrim, p_dtSeg, p_oper ) { var v_prim = montaData( p_dtPrim ); var v_seg = montaData( p_dtSeg ); p_oper = ( p_oper ) ? p_oper : '<'; if ( !v_prim || !v_seg ) return false; var v_data1 = v_prim[ 2 ] + v_prim[ 1 ] + v_prim[ 0 ]; var v_data2 = v_seg[ 2 ] + v_seg[ 1 ] + v_seg[ 0 ]; var v_result = eval(v_data1 + p_oper + v_data2); return v_result;}</script>
Obs.: altere o nome "MeuForm" e "MeuCampo" para o nome certo do seu form e do seu campo na linha 6: document.MeuForm.MeuCampo.focus();
Use esse botão para verificar:
<input type="button" name="verificar" value="Verificar" onClick="verifica()">
;)>
Use isso entre as tags <head> e </head>
<script>function verifica () { if (comparaData( v_data1, v_data2, '<=' )) alert('Datas estão certas!'); else { alert('ATENÇÃO: Data de saída é menor que data de entrada'); document.MeuForm.MeuCampo.focus(); }}// Função que monta a data no formato correto para compará-lafunction montaData( p_data ) { var diasMeses = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); var v_exp = /(0?[1-9]|[12][0-9]|3[01])[\-\/](1[0-2]|0?[1-9])[\-\/]((19|20)?\d{2})$/; if ( v_exp.test( p_data ) ) { var v_data = v_exp.exec( p_data ); var v_dia = v_data[ 1 ]; var v_mes = v_data[ 2 ]; var v_ano = ( v_data[ 4 ] ) ? v_data[ 3 ] : '19' + v_data[ 3 ]; diasMeses[2] = ( ( v_ano % 400 == 0 ) || (( v_ano % 4 == 0 ) && ( v_ano % 100 != 0 )) ) ? 29 : 28;:wacko: if ( v_dia <= diasMeses[ v_mes ] ) return [ v_dia, v_mes, v_ano ]; } return null;} // Função que faz a comparação mesmofunction comparaData( p_dtPrim, p_dtSeg, p_oper ) { var v_prim = montaData( p_dtPrim ); var v_seg = montaData( p_dtSeg ); p_oper = ( p_oper ) ? p_oper : '<'; if ( !v_prim || !v_seg ) return false; var v_data1 = v_prim[ 2 ] + v_prim[ 1 ] + v_prim[ 0 ]; var v_data2 = v_seg[ 2 ] + v_seg[ 1 ] + v_seg[ 0 ]; var v_result = eval(v_data1 + p_oper + v_data2); return v_result;}</script>Obs.: altere o nome "MeuForm" e "MeuCampo" para o nome certo do seu form e do seu campo na linha 6: document.MeuForm.MeuCampo.focus();Use esse botão para verificar:<input type="button" name="verificar" value="Verificar" onClick="verifica()"> ;)
Só mais essa e prometo q não te pertubo mais, é o seguinte, tem como eu usar um outro meio se verificar a data sem ser pelo botão?Eu gostaria que funcionasse assim, a pessoa vai preenchendo o formulário e teria o campo entrada que ele preencheria e logo em seguida o campo saída e após ele preencher este no próximo campo ao apertar tab ou selecionar o campo seguinte haveria a verificação sem a necessidade de criar um botão, eu poderia fazer assim no form seguinte ao campo saida ou no próprio campo colocar a função onKeyUp="comparaData();" ??? :rolleyes: Mas de qualquer forma, valeu mesmo, você já me ajudou muito, obrigado.
Use isso entre as tags <head> e </head>
<script>function verifica () { if (comparaData( document.MeuForm.MeuCampoData1.value, document.MeuForm.MeuCampoData2.value, '<=' )) alert('Datas estão certas!'); else { alert('ATENÇÃO: Data de saída é menor que data de entrada'); document.MeuForm.MeuCampoData1.focus(); }}// Função que monta a data no formato correto para compará-lafunction montaData( p_data ) { var diasMeses = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); var v_exp = /(0?[1-9]|[12][0-9]|3[01])[\-\/](1[0-2]|0?[1-9])[\-\/]((19|20)?\d{2})$/; if ( v_exp.test( p_data ) ) { var v_data = v_exp.exec( p_data ); var v_dia = v_data[ 1 ]; var v_mes = v_data[ 2 ]; var v_ano = ( v_data[ 4 ] ) ? v_data[ 3 ] : '19' + v_data[ 3 ]; diasMeses[2] = ( ( v_ano % 400 == 0 ) || (( v_ano % 4 == 0 ) && ( v_ano % 100 != 0 )) ) ? 29 : 28;:wacko: if ( v_dia <= diasMeses[ v_mes ] ) return [ v_dia, v_mes, v_ano ]; } return null;} // Função que faz a comparação mesmofunction comparaData( p_dtPrim, p_dtSeg, p_oper ) { var v_prim = montaData( p_dtPrim ); var v_seg = montaData( p_dtSeg ); p_oper = ( p_oper ) ? p_oper : '<'; if ( !v_prim || !v_seg ) return false; var v_data1 = v_prim[ 2 ] + v_prim[ 1 ] + v_prim[ 0 ]; var v_data2 = v_seg[ 2 ] + v_seg[ 1 ] + v_seg[ 0 ]; var v_result = eval(v_data1 + p_oper + v_data2); return v_result;}</script>Obs.: altere o nome "MeuForm" e "MeuCampoDataN" para o nome certo do seu form e do seu campo nas linhas 3 e 6: document.MeuForm.MeuCampo.focus();
No campo da data de saída, você coloca:
<input ................ onBlur="verifica();">
if (comparaData( data1, data2, '<=' ) alert('Datas estão certas!');else alert('ATENÇÃO: Data de saída é menor que data de entrada');
Obs.: Use a função original.
Abraços, T+