Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/03/2011, 14:32
Avatar de Naahuel
Naahuel
 
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Restar Fechas y sumar dias en Javascript

Bueno pues de aburrido y porque me pareció interesante, lo convertí yo:
Código HTML:
<!DOCTYPE html> 
<head> 
	<script src="http://jqueryui.com/jquery-1.4.4.js"></script> 
	<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.10/jquery-ui.js"></script> 
	<script src="http://jquery-ui.googlecode.com/svn/trunk/ui/i18n/jquery.ui.datepicker-es.js"></script> 
	<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.3/themes/base/jquery-ui.css"> 
	<script type="text/javascript"> 
	$(function() {
		//incluir datepicker, solo para molestar :P 
		$( ".datepicker" ).datepicker();
		
		
		//calculo de la diferencia
		$('#calcular').click(function(){
			var fecha_1 = $('#fecha_1').val().split('/');
			var fecha_2 = $('#fecha_2').val().split('/');
			//calcular la diferencia
			var dif = FechaDif(fecha_1[0], fecha_1[1], fecha_1[2],
								fecha_2[0], fecha_2[1], fecha_2[2]);
			//mostrar la diferencia
			$('#diferencia').val(dif + ' dias de diferencia');
		});
		
		//funciones
		function FechaDif(dia1,mes1,anio1,dia2,mes2,anio2)
		{
		*	/* Meses con 31:
		*	*	Enero(1) Marzo(3) Mayo(5) Julio(7) Agosto(8) Octubre(10) Diciembre(12)
		*	*	
		*	*	Meses con 30:
		*	*	Abril(4) Junio(6) Setiembre(9) Noviembre(11)
		*	*	
		*	*	Meses con 28:
		*	*	Febrero(2)
		*	*/
		*	var dias1,dias2,dif;
		*	//convertir a numeros
			dia1 = parseInt(dia1,10);
			mes1 = parseInt(mes1,10);
			anio1 = parseInt(anio1,10);
			dia2 = parseInt(dia2,10);
			mes2 = parseInt(mes2,10);
			anio2 = parseInt(anio2,10);
			
		*	//Chequear valores.
		*	if((mes1>12)||(mes2>12)){ return -1;}
		*	
		*	if((mes1==1)||(mes1==3)||(mes1==5)||(mes1==7)||(mes1==8)||(mes1==10)||(mes1==12)){
		*	*	if(dia1>31){
		*	*	*	return -1;}
			}
		*	if((mes2==1)||(mes2==3)||(mes2==5)||(mes2==7)||(mes2==8)||(mes2==10)||(mes2==12)){
		*	*	if(dia2>31){
		*	*	*	return -1;}
			}
		*	if((mes1==4)||(mes1==6)||(mes1==9)||(mes1==11)){
		*	*	if(dia1>30){
		*	*	*	return -1;}
			}
		*	if((mes2==4)||(mes2==6)||(mes2==9)||(mes2==11)){
		*	*	if(dia2>30){
		*	*	*	return -1;}
			}
		*	if(mes1==2 && dia1>29){
		*	*	*	return -1;}
		*	if(mes2==2 && dia2>29){
		*	*	*	return -1;}
		*	
		*	dias1 = FechaADias(dia1,mes1,anio1);
		*	dias2 = FechaADias(dia2,mes2,anio2);
		*	//devolver la diferencia positiva
		*	dif = dias2 - dias1;
		*	if(dif<0){
		*	*	return ((-1*dif));}
		*	return dif;
		}
		
		function FechaADias(dia, mes, anno){
		*/*Devuelve la cantidad de días desde el 1/01/1904
		*	No verifica datos. Llamada desde FechaDif()
		*	intervalo permitido: 1904-2099
		*	**/
		*	
			dia = parseInt(dia,10);
			mes = parseInt(mes,10);
			anno = parseInt(anno,10);
		*	var cant_bic,cant_annos,cant_dias, no_es_bic;
		*
		*	
		*	//verificar la cantidad de biciestos en el periodo (div entera)
		*	//+1 p/contar 1904
		*	cant_bic = parseInt((anno-1904)/4 + 1);
		*	no_es_bic = parseInt((anno % 4));
		*	//calcular dias transcurridos hasta el 31 de dic del año anterior
		*	cant_annos = parseInt(anno-1904);
		*	cant_dias = parseInt(cant_annos*365 + cant_bic);
		*	
		*	//calcular dias transcurridoes desde el 31 de dic del año anterior
		*	//hasta el mes anterior al ingresado
		*	var i;
		*	for(i=1;i<=mes;i++){
		*	*	if((i==1)||(i==3)||(i==5)||(i==7)||(i==8)||(i==10)||(i==12)){
		*	*	*	cant_dias+=31;}
		*	*	if((i==4)||(i==6)||(i==9)||(i==11)){
		*	*	*	cant_dias+=30;}
		*	*	if(i==2)
		*	*	*	{
		*	*	*	if(no_es_bic){
		*	*	*	*	cant_dias+=28;}
		*	*	*	else{
		*	*	*	*	cant_dias+=29;}
		*	*	}
		*	}	
		*	//sumarle los dias transcurridos en el mes
		*	cant_dias+=dia;
		*	return cant_dias;
		}
	});
	</script> 
</head> 
<body> 
 
<p>Fecha 1: <input type="text" id="fecha_1" class="datepicker"></p> 
<p>Fecha 2: <input type="text" id="fecha_2" class="datepicker"></p> 
<p>Diferencia en dias: <input type="text" id="diferencia" disabled="disabled"></p> 
<p><button id="calcular">Calcular</button></p>

 
</body> 
Espero se entienda. Acá podés verlo en funcionamiento:
http://jsbin.com/imodi3 <- Acá podés ver el código si vas a "Edit using JS Bin"- No puedo sacar las estrellitas de acá :P

Saludos!

Última edición por Naahuel; 14/03/2011 a las 14:46 Razón: Sale mal el url