Validar data dentro de período [RESOLVIDO]

2 respostas
P

Pessoal,

Tenho uma função javascript para validar data, (ta feia, eu sei... Por isso peço a ajuda de vcs :) ), mas quando está dentro do mês ele valida blz, mas se escolho outro mês não valida, no sentido:

29/09/2014 até 02/10/2014 fala que está acima de 30 dias...

var checkForm = function(form){
    var inputs = form.getElementsByTagName('input');
	var dataIni=formIndex.dataIni.value; 
	var dataFin=formIndex.dataFin.value;
	var horaIni=formIndex.horaIni.value; 
	var horaFin=formIndex.horaFin.value;
    var Compara01 = parseInt(dataIni.split("/")[2].toString() + dataIni.split("/")[1].toString() + dataIni.split("/")[0].toString());     
    var Compara02 = parseInt(dataFin.split("/")[2].toString() + dataFin.split("/")[1].toString() + dataFin.split("/")[0].toString()); 
	
    if(form.grama.value != "0"){
    for(var i = 0, l = inputs.length; i < l; i++){
        var input = inputs[i];
        if(input.type == "checkbox" && input.checked){
        	
             if(dataIni != "" && dataFin != ""){
            	if(horaIni.length > 3 && horaFin.length > 3){
            		if(Compara02 >= Compara01) {
            			if(Compara02 <= Compara01 + 30){ // AQUI ESTÁ A VALIDAÇÃO

	            			if(horaFin >= horaIni) {
	            				return true;	
	            			} else {
	            				alert('Hora Inicial maior que Hora Final');
	            				return false;
	            			}
            			
            			} else {
            				alert('Limite de consulta de 30 dias');
            				return false;
            			}
            			
            		} else {
            			alert('Data Inicial maior que Data Final');
            			return false;
            		}
            	} else {
               		alert("Campo(s) Hora Ini/Fin vazio(s)");
                   	return false;	
               	}            			
            } else {
            	alert("Campo(s) Data Ini/Fin vazio(s)");
               	return false;	
            } 
        }
    }
    
    alert("Campos obrigat\u00f3rios: Data/hora e pelo menos um item");
    return false;
    
    } else {
    	alert("Selecione um Grama");
    	return false;
    }
};

2 Respostas

P

Travei com Jquery a limitação de data, então a data inicial já limita o início da data final e a data final começa pelo menos pelo dia de hoje, evitando a data inicial ser menor…

Só que estou com um problema, se a pessoa clicar no campo e digitar manualmente burla o jquery… tem alguma função que limite isso?? para já validar quando a pessoa digita?

campo:

<div title="Data Inicial">Dt. Ini.:&nbsp;<input type="text" size="6" maxlength="10" id="dataIni" name="dataIni"/></div>

Em jquery:

$(function() {
$.datepicker.setDefaults({
dateFormat: 'dd/mm/yy',
dayNames: ['Domingo','Segunda','Terça','Quarta','Quinta','---ta','Sábado'],
dayNamesMin: ['D','S','T','Q','Q','S','S','D'],
dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','---','Sáb','Dom'],
monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'],
nextText: 'Pr&oacute;ximo',
prevText: 'Anterior',
required: true,
showOtherMonths:true,
selectOtherMonths: false,
changeMonth:true,
changeYear:true, 
firstDay: 0, 
showOn: 'both', 
showOn:"button",
buttonImage: "./img/calendar_icon.png",
buttonImageOnly: true
});
 
$('#dataIni').datepicker({onSelect: function(date) {
date = $(this).datepicker('getDate');
var maxDate = new Date(date.getTime());
maxDate.setDate(maxDate.getDate() + 31);
$('#dataFin').datepicker('option', {minDate: date, maxDate: maxDate})  
}});
 
$('#dataFin').datepicker({minDate: 0, numberOfMonths: 2});
});
P

E também, com essa validação de período:

var DataIni = new Date(2014,09,29);
var DataFim = new Date(2014,10,02);
var DiasEmMilisegundos = 1000*60*60*24*30;
//1000  Milisegundos
//60 Segundos
//60 Minutos
//24 Horas
//30 Dias <-- Aqui vocÊ coloca quandos dias quer

if( DataIni.getTime()+DiasEmMilisegundos >= DataFim.getTime() ){
	alert("Entre as Datas");
}else{
	alert("Passou de 30 dias");
}
Criado 6 de outubro de 2014
Ultima resposta 9 de out. de 2014
Respostas 2
Participantes 1