Foros del Web » Programando para Internet » PHP »

sumar dos fechas ya leido todo lo demas

Estas en el tema de sumar dos fechas ya leido todo lo demas en el foro de PHP en Foros del Web. hola amigos ya he leido todos los post referente a esto pero aun asi me sigue dando problemas os cuento... tengo este codigo Código PHP: ...
  #1 (permalink)  
Antiguo 16/06/2008, 02:54
 
Fecha de Ingreso: junio-2007
Mensajes: 82
Antigüedad: 16 años, 10 meses
Puntos: 0
sumar dos fechas ya leido todo lo demas

hola amigos ya he leido todos los post referente a esto pero aun asi me sigue dando problemas os cuento...

tengo este codigo

Código PHP:
$grupo=utf8_decode($_POST['grupo']);    
    
$fechaActual=utf8_decode($_POST['Fentrega']);    
    
$fechaInicio=utf8_decode($_POST['Frecogida']);
    
$Hentrega=utf8_decode($_POST['Hentrega']);
    
$Hrecogida=utf8_decode($_POST['Hrecogida']);
    
$provincia=utf8_decode($_POST['provincia']);
    
$oficina=utf8_decode($_POST['oficina']);
    
$Hrecogida=utf8_decode($_POST['Hrecogida']);
    
    
    
 
$dia1 substr($fechaActual02);   
$mes1 substr($fechaActual35);   
$anio1 substr($fechaActual610);   
$dia2 substr($fechaInicio02);   
$mes2 substr($fechaInicio35);   
$anio2 substr($fechaInicio610);   

//calculo timestam de las dos fechas
$timestamp1 mktime(0,0,0,$mes1,$dia1,$ano1);
$timestamp2 mktime(4,12,0,$mes2,$dia2,$ano2);

//resto a una fecha la otra
$segundos_diferencia $timestamp1 $timestamp2;
//echo $segundos_diferencia;

//convierto segundos en días
$dias_diferencia $segundos_diferencia / (60 60 24);

//obtengo el valor absoulto de los días (quito el posible signo negativo)
$dias_diferencia abs($dias_diferencia);

//quito los decimales a los días de diferencia
$dias_diferencia floor($dias_diferencia); 

y el problema que tengo es que dentro de un mismo mes todo funciona bien el caso es que si la fecha cambia de mes automaticamente siempre el resultado es de 30 dias

por favor estoy en un atoyadero espero que alguien tenga conocimiento de mi solucion gracias
  #2 (permalink)  
Antiguo 16/06/2008, 03:16
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: sumar dos fechas ya leido todo lo demas

hola

a ver si te sirve esta funcion para retar fachas con resultado en dias


Código PHP:

// Fecha en formato dd/mm/yyyy o dd-mm-yyyy retorna la diferencia en dias
echo "pruebas funcion resta fechas<br>";
function 
restaFechas($dFecIni$dFecFin)
{
    
$dFecIni str_replace("-","",$dFecIni);
    
$dFecIni str_replace("/","",$dFecIni);
    
$dFecFin str_replace("-","",$dFecFin);
    
$dFecFin str_replace("/","",$dFecFin);

    
ereg"([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})"$dFecIni$aFecIni);
    
ereg"([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})"$dFecFin$aFecFin);

    
$date1 mktime(0,0,0,$aFecIni[2], $aFecIni[1], $aFecIni[3]);
    
$date2 mktime(0,0,0,$aFecFin[2], $aFecFin[1], $aFecFin[3]);

    return 
round(($date2 $date1) / (60 60 24));
}

// Ej.: con fechas fijas
$resultado_resta restaFechas('16-06-2008','19-06-2008');
echo 
"resultado de la resta de fechas ".$resultado_resta." días."
  #3 (permalink)  
Antiguo 16/06/2008, 03:24
 
Fecha de Ingreso: junio-2007
Mensajes: 82
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: sumar dos fechas ya leido todo lo demas

gracias por tu rapida respuesta la verdad es que funciona muy bien pero ahora el problema es otro ... el formato de mi fecha es este

dd/mm/aaaa

pero cuando el dia esdel 1 al 9
me viene asi
d/mm/aaaa

alguna suguerencia.. el caso es que coji un calendario pero no se donde lex cambiar los datos de los dias
  #4 (permalink)  
Antiguo 16/06/2008, 03:43
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: sumar dos fechas ya leido todo lo demas

como obtienes las fechas para que te salgan en ese formato?
  #5 (permalink)  
Antiguo 16/06/2008, 03:59
Avatar de almarin  
Fecha de Ingreso: junio-2008
Mensajes: 44
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: sumar dos fechas ya leido todo lo demas

Cita:
Iniciado por jositosov Ver Mensaje
gracias por tu rapida respuesta la verdad es que funciona muy bien pero ahora el problema es otro ... el formato de mi fecha es este

dd/mm/aaaa

pero cuando el dia esdel 1 al 9
me viene asi
d/mm/aaaa

alguna suguerencia.. el caso es que coji un calendario pero no se donde lex cambiar los datos de los dias
Yo, en vez de utilizar:
Código PHP:
$dia1 substr($fechaActual02);   
$mes1 substr($fechaActual35);   
$anio1 substr($fechaActual610);   
$dia2 substr($fechaInicio02);   
$mes2 substr($fechaInicio35);   
$anio2 substr($fechaInicio610); 
utilizaría esto otro:

Código PHP:
list($dia1,$mes1,$anio1)=split("/",$fechaActual);
list(
$dia2,$mes2,$anio2)=split("/",$fechaInicio); 
Así, de esta forma te da igual que sea d/mm/yy, que dd/mm/yy que dd/mm/yyyy

Saludos.
  #6 (permalink)  
Antiguo 16/06/2008, 04:35
 
Fecha de Ingreso: junio-2007
Mensajes: 82
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: sumar dos fechas ya leido todo lo demas

pues las recivo desde un javasript

aqui os lo dejo
la historia esque yo de java script nada de nada

Código:
/* --- Swazz Javascript Calendar ---
/* --- v 1.0 3rd November 2006
By Oliver Bryant
http://calendar.swazz.org */

function getObj(objID)
{
    if (document.getElementById) {return document.getElementById(objID);}
    else if (document.all) {return document.all[objID];}
    else if (document.layers) {return document.layers[objID];}
}

function checkClick(e) {
	e?evt=e:evt=event;
	CSE=evt.target?evt.target:evt.srcElement;
	if (getObj('fc'))
		if (!isChild(CSE,getObj('fc')))
			getObj('fc').style.display='none';
}

function isChild(s,d) {
	while(s) {
		if (s==d) 
			return true;
		s=s.parentNode;
	}
	return false;
}

function Left(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function Top(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}
	
document.write('<table id="fc" style="position:absolute;border-collapse:collapse;background:#FFFFFF;border:1px solid #ABABAB;display:none" cellpadding=2>');
document.write('<tr><td style="cursor:pointer" onclick="csubm()"><img src="arrowleftmonth.gif"></td><td colspan=5 id="mns" align="center" style="font:bold 13px Arial"></td><td align="right" style="cursor:pointer" onclick="caddm()"><img src="arrowrightmonth.gif"></td></tr>');
document.write('<tr><td align=center style="background:#ABABAB;font:12px Arial">S</td><td align=center style="background:#ABABAB;font:12px Arial">M</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">W</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">F</td><td align=center style="background:#ABABAB;font:12px Arial">S</td></tr>');
for(var kk=1;kk<=6;kk++) {
	document.write('<tr>');
	for(var tt=1;tt<=7;tt++) {
		num=7 * (kk-1) - (-tt);
		document.write('<td id="v' + num + '" style="width:18px;height:18px">&nbsp;</td>');
	}
	document.write('</tr>');
}
document.write('</table>');

document.all?document.attachEvent('onclick',checkClick):document.addEventListener('click',checkClick,false);


// Calendar script
var now = new Date;
var sccm=now.getMonth();
var sccy=now.getFullYear();
var ccm=now.getMonth();
var ccy=now.getFullYear();

var updobj;
function lcs(ielem) {
	updobj=ielem;
	getObj('fc').style.left=Left(ielem);
	getObj('fc').style.top=Top(ielem)+ielem.offsetHeight;
	getObj('fc').style.display='';
	
	// First check date is valid
	curdt=ielem.value;
	curdtarr=curdt.split('/');
	isdt=true;
	for(var k=0;k<curdtarr.length;k++) {
		if (isNaN(curdtarr[k]))
			isdt=false;
	}
	if (isdt&(curdtarr.length==3)) {
		ccm=curdtarr[1]-1;
		ccy=curdtarr[2];
		prepcalendar(curdtarr[0],curdtarr[1]-1,curdtarr[2]);
	}
	
}

function evtTgt(e)
{
	var el;
	if(e.target)el=e.target;
	else if(e.srcElement)el=e.srcElement;
	if(el.nodeType==3)el=el.parentNode; // defeat Safari bug
	return el;
}
function EvtObj(e){if(!e)e=window.event;return e;}
function cs_over(e) {
	evtTgt(EvtObj(e)).style.background='#FFCC66';
}
function cs_out(e) {
	evtTgt(EvtObj(e)).style.background='#C4D3EA';
}
function cs_click(e) {
	updobj.value=calvalarr[evtTgt(EvtObj(e)).id.substring(1,evtTgt(EvtObj(e)).id.length)];
	getObj('fc').style.display='none';
	
}

var mn=new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC');
var mnn=new Array('31','28','31','30','31','30','31','31','30','31','30','31');
var mnl=new Array('31','29','31','30','31','30','31','31','30','31','30','31');
var calvalarr=new Array(42);

function f_cps(obj) {
	obj.style.background='#C4D3EA';
	obj.style.font='10px Arial';
	obj.style.color='#333333';
	obj.style.textAlign='center';
	obj.style.textDecoration='none';
	obj.style.border='1px solid #6487AE';
	obj.style.cursor='pointer';
}

function f_cpps(obj) {
	obj.style.background='#C4D3EA';
	obj.style.font='10px Arial';
	obj.style.color='#ABABAB';
	obj.style.textAlign='center';
	obj.style.textDecoration='line-through';
	obj.style.border='1px solid #6487AE';
	obj.style.cursor='default';
}

function f_hds(obj) {
	obj.style.background='#FFF799';
	obj.style.font='bold 10px Arial';
	obj.style.color='#333333';
	obj.style.textAlign='center';
	obj.style.border='1px solid #6487AE';
	obj.style.cursor='pointer';
}

// day selected
function prepcalendar(hd,cm,cy) {
	now=new Date();
	sd=now.getDate();
	td=new Date();
	td.setDate(1);
	td.setFullYear(cy);
	td.setMonth(cm);
	cd=td.getDay();
	getObj('mns').innerHTML=mn[cm]+ ' ' + cy;
	marr=((cy%4)==0)?mnl:mnn;
	for(var d=1;d<=42;d++) {
		f_cps(getObj('v'+parseInt(d)));
		if ((d >= (cd -(-1))) && (d<=cd-(-marr[cm]))) {
			dip=((d-cd < sd)&&(cm==sccm)&&(cy==sccy));
			htd=((hd!='')&&(d-cd==hd));
			if (dip)
				f_cpps(getObj('v'+parseInt(d)));
			else if (htd)
				f_hds(getObj('v'+parseInt(d)));
			else
				f_cps(getObj('v'+parseInt(d)));

			getObj('v'+parseInt(d)).onmouseover=(dip)?null:cs_over;
			getObj('v'+parseInt(d)).onmouseout=(dip)?null:cs_out;
			getObj('v'+parseInt(d)).onclick=(dip)?null:cs_click;
			
			getObj('v'+parseInt(d)).innerHTML=d-cd;	
			calvalarr[d]=''+(d-cd)+'/'+(cm-(-1))+'/'+cy;
		}
		else {
			getObj('v'+d).innerHTML='&nbsp;';
			getObj('v'+parseInt(d)).onmouseover=null;
			getObj('v'+parseInt(d)).onmouseout=null;
			getObj('v'+parseInt(d)).style.cursor='default';
			}
	}
}

prepcalendar('',ccm,ccy);
//getObj('fc'+cc).style.visibility='hidden';

function caddm() {
	marr=((ccy%4)==0)?mnl:mnn;
	
	ccm+=1;
	if (ccm>=12) {
		ccm=0;
		ccy++;
	}
	cdayf();
	prepcalendar('',ccm,ccy);
}

function csubm() {
	marr=((ccy%4)==0)?mnl:mnn;
	
	ccm-=1;
	if (ccm<0) {
		ccm=11;
		ccy--;
	}
	cdayf();
	prepcalendar('',ccm,ccy);
}

function cdayf() {
if ((ccy>sccy)|((ccy==sccy)&&(ccm>=sccm)))
	return;
else {
	ccy=sccy;
	ccm=sccm;
	cfd=scfd;
	}
}
  #7 (permalink)  
Antiguo 16/06/2008, 04:50
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Respuesta: sumar dos fechas ya leido todo lo demas

pues postea en ek foro de js aver si te ayudan a que el formato de fecha sea dd-mm-YY
  #8 (permalink)  
Antiguo 16/06/2008, 05:00
 
Fecha de Ingreso: junio-2007
Mensajes: 82
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: sumar dos fechas ya leido todo lo demas

gracias a todos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:51.