Ir para conteúdo

POWERED BY:

Arquivado

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

rdpacato

Comparar datas

Recommended Posts

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;
    }
};

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.: <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ç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ó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});
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se quiser também pode usar a função de getTime do javascript, não lembro muito bem como manipula ela mas uma maneira simples seria...

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");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado rnxn pela força.. .mas dessa vez vou usar a do lukas pq funcionou e não precisarei de mais um js no projeto aqui.. mas obrigado mesmo pela força de todos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Lukas obrigado pela força.. estou travado nisso.. a data eu uso o datepicker do jquery, mas está no formato pt:

var checkForm = function(form){
    var inputs = form.getElementsByTagName('input');
	var dataIni= new Date(formIndex.dataIni.value); 
	var dataFin= new Date(formIndex.dataFin.value);
	var horaIni= formIndex.horaIni.value; 
	var horaFin= formIndex.horaFin.value;
	var diasEmMilisegundos = 1000*60*60*24*32;
	//1000  Milisegundos
	//60 Segundos
	//60 Minutos
	//24 Horas
	//30 Dias <-- Aqui vocÊ coloca quandos dias quer
	
	if(form.veiculo.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( dataIni.getTime()+diasEmMilisegundos >= dataFin.getTime() ){
						if(horaIni.length > 3 && horaFin.length > 3){
							if(horaFin >= horaIni) {
								return true;	
							} else {
								alert('Hora Inicial maior que Hora Final');
								return false;
							}           			
						} else {
							alert("Campo(s) Hora Ini/Fin vazio(s)");
							return false;	
						} 
					} else {
						alert("Limite de 30 dias");
						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 Ve\u00edculo");
		return false;
	}
}; 

Datepicker

$(function() {
    $.datepicker.setDefaults({
    	dateFormat: 'dd/mm/yy',
	    dayNames: ['Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sábado'],
	    dayNamesMin: ['D','S','T','Q','Q','S','S','D'],
	    dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb','Dom'],
	    monthNames: ['Janeiro','Fevereiro','Març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ó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});
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi,

Faz o seguinte , segue essa função:

function RetornaData(DataOriginal){
  var DataP = DataOriginal.split('/');
  var Dia = DataP[0],
      Mes = DataP[1],
      Ano = DataP[2];
  var DataNew = new Date(Ano,Mes-1,Dia);
    
  return {Dia:Dia,
          Mes:Mes,
          Ano:Ano,
          toDate:DataNew
         }; 
	
}

Agora ao inves de você colocar var dataIni= new Date(formIndex.dataIni.value); você coloca dataIni = RetornaData(formIndex.dataIni.value).toDate;

 

com o dataFim a mesma coisa, OK?

 

Abraço.

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.