Jump to content


Photo

Problema con restar 2 fechas


  • Please log in to reply
5 replies to this topic

#1 mrazurib

mrazurib

    Newbie

  • Miembros
  • Pip
  • 3 posts

Posted 27 November 2011 - 01:24 PM

hola amigos soy un estudiante de ing de sistemas tengo una duda
en la universidad me dejaron realizar un sistema que me permita avisar cuando un documento tiene un fecha de expiracion
que me liste cuales son los documentos que les faltan 5 dias para q expiren

tabla

Soat  Nº, compañia, fecha expirancion

tengo la tabla soat quiero una lista de los soat que tiene 5 dias para expira

muchas gracias por su ayuda (y)
  • 0

#2 razadi

razadi

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 681 posts
  • LocationMéxico D.F.

Posted 27 November 2011 - 02:15 PM

Saludos amigo, mira yo me hice esta función para saber cuantos días hay entre dos fechas, espero te ayude con tu problema o por lo menos te de una idea de como hacerlo, saludos.


function DiferenciasFechas($From,$To $d1, $d2){ 
    $aVal1 = explode("-", $From); 
$fechaFrom = mktime(0, 0, 0, intval($aVal1[1]), intval($aVal1[0]), intval($aVal1[2])); 
 
$aVal2 = explode("-", $To); 
  $fechaTo = mktime(0, 0, 0, intval($aVal2[1]), intval($aVal2[0]), intval($aVal2[2])); 
 
  $diferencia = $fechaTo - $fechaFrom; 
 
  return floor($diferencia/(60*60*24)); 
}


(y)
  • 0

#3 mrazurib

mrazurib

    Newbie

  • Miembros
  • Pip
  • 3 posts

Posted 29 November 2011 - 10:14 AM

Gracias me podrías explicar un poco el código es q recién estoy q aprendo a programar en php


alguien sabe como hacer para q este codigo recorra toda una lista de y me saque
todos los que en la resta dieron menos de 5 dias
GRACIAS  (y)
  • 0

#4 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 29 November 2011 - 02:26 PM

Eso lo puedes hacer con una simple consulta sql, en
fireBird seria asi:

select * from Soat where (current_date-FechaExpiracion<5)


Y listo, tienes tu listado con los que cumplen tu condicion.. bueno, aqui obtienes tambien los vencidos ya que la resta te da negativo, pero podrias hacelo tambien asi:

select * from Soat where (FechaExpiracion between current_date and current_date+5)


El campo "virtual" current_date es propio de FireBird, y te la da la fecha del servidor de FireBird, no de tu PC (es mejor asi). En otros motores como MySQL no sé como se haría, pero seguro que muy similar.
  • 0

#5 mrazurib

mrazurib

    Newbie

  • Miembros
  • Pip
  • 3 posts

Posted 30 November 2011 - 07:39 AM

Gracias esta interesante  pero como seria en mysql seria la forma mas facil de hacer :)

para restar en php en contre esto

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('01-05-2007','04-05-2007');
echo "Artículo publicado hace ".$resultado_resta." días.";

// Podemos reemplazar la fecha inicial fija, por las que tengamos en el registro del Artículo de la base de datos
// Ej.: $resultado_resta = restaFechas( $fecha_articulo , date('d-m-Y') );

?>

pero como lo puedo aplicar para una lista así como la q explico en la primera parte


GRACIAS POR SU AYUDA A TODOS
  • 0

#6 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 30 November 2011 - 11:09 AM

No le des mas vueltas, al definir tu lista usas una sql, modificala como te digo pero ajustado a mysql (current_date es solo de firebird creo, alguien por aqui sabra decirte el equivalente, yo soy muy de firebird) y tu lista solo recibirá lo que tu quieres, no necesitas filtrar en PHP ni nada similar, todas las lineas te valdrán.
  • 0




IP.Board spam blocked by CleanTalk.