Aquí les dejo una colección de funciones desarrolladas para manejar fechas
Código PHP :
//recibe un $date del tipo yyyy-mm-dd e imprime: (dia) de (mes) del (año)
function fecha($date){
$fecha=array('dia','mes','anio');
$date=explode("-",$date);
$fecha['dia']=$date[2];
$fecha['mes']=$date[1];
$fecha['anio']=$date[0];
if($fecha['mes']=="01"){$mes="Enero";}
if($fecha['mes']=="02"){$mes="Febrero";}
if($fecha['mes']=="03"){$mes="Marzo";}
if($fecha['mes']=="04"){$mes="Abril";}
if($fecha['mes']=="05"){$mes="Mayo";}
if($fecha['mes']=="06"){$mes="Junio";}
if($fecha['mes']=="07"){$mes="Julio";}
if($fecha['mes']=="08"){$mes="Agosto";}
if($fecha['mes']=="09"){$mes="Septiembre";}
if($fecha['mes']=="10"){$mes="Octubre";}
if($fecha['mes']=="11"){$mes="Noviembre";}
if($fecha['mes']=="12"){$mes="Diciembre";}
$strfecha=$fecha['dia']." de ".$mes." de ".$fecha['anio'];
return $strfecha;
}
//recibe un datetime del tipo yyyy-mm-dd hh:mm:ss e imprime: (dia) de (mes) de (año) a las (horas:minutos:segundos)
function fechaHora($datetime){
$fecha=array('dia','mes','anio','hora');
$separado=array('date','hora');
$datetime=explode(" ",$datetime);
$separado['date']=$datetime[0];
$separado['hora']=$datetime[1];
$date=explode("-",$separado['date']);
$fecha['hora']=$separado['hora'];
$fecha['dia']=$date[2];
$fecha['mes']=$date[1];
$fecha['anio']=$date[0];
if($fecha['mes']=="01"){$mes="Enero";}
if($fecha['mes']=="02"){$mes="Febrero";}
if($fecha['mes']=="03"){$mes="Marzo";}
if($fecha['mes']=="04"){$mes="Abril";}
if($fecha['mes']=="05"){$mes="Mayo";}
if($fecha['mes']=="06"){$mes="Junio";}
if($fecha['mes']=="07"){$mes="Julio";}
if($fecha['mes']=="08"){$mes="Agosto";}
if($fecha['mes']=="09"){$mes="Septiembre";}
if($fecha['mes']=="10"){$mes="Octubre";}
if($fecha['mes']=="11"){$mes="Noviembre";}
if($fecha['mes']=="12"){$mes="Diciembre";}
$strfecha=$fecha['dia']." de ".$mes." de ".$fecha['anio']." a las ".$fecha['hora'];
return $strfecha;
}
//recibe un datetime del tipo yyyy-mm-dd hh:mm:ss e imprime: (dia) de (mes) de (año)
function fechaDatetime($datetime){
$fecha=array('dia','mes','anio','hora');
$separado=array('date','hora');
$datetime=explode(" ",$datetime);
$separado['date']=$datetime[0];
$separado['hora']=$datetime[1];
$date=explode("-",$separado['date']);
$fecha['hora']=$separado['hora'];
$fecha['dia']=$date[2];
$fecha['mes']=$date[1];
$fecha['anio']=$date[0];
if($fecha['mes']=="01"){$mes="Enero";}
if($fecha['mes']=="02"){$mes="Febrero";}
if($fecha['mes']=="03"){$mes="Marzo";}
if($fecha['mes']=="04"){$mes="Abril";}
if($fecha['mes']=="05"){$mes="Mayo";}
if($fecha['mes']=="06"){$mes="Junio";}
if($fecha['mes']=="07"){$mes="Julio";}
if($fecha['mes']=="08"){$mes="Agosto";}
if($fecha['mes']=="09"){$mes="Septiembre";}
if($fecha['mes']=="10"){$mes="Octubre";}
if($fecha['mes']=="11"){$mes="Noviembre";}
if($fecha['mes']=="12"){$mes="Diciembre";}
$strfecha=$fecha['dia']." de ".$mes." de ".$fecha['anio'];
return $strfecha;
}
//recibe un datetime del tipo yyyy-mm-dd hh:mm:ss e imprime: (yyyy-mm-dd)
function fechaDatetimeADate($datetime){
$fecha=array('dia','mes','anio','hora');
$separado=array('date','hora');
$datetime=explode(" ",$datetime);
$separado['date']=$datetime[0];
$strfecha=$separado['date'];
return $strfecha;
}
//recibe un datetime del tipo yyyy-mm-dd hh:mm:ss e imprime: (horas:minutos:segundos)
function horaDatetime($datetime){
$fecha=array('dia','mes','anio','hora');
$separado=array('date','hora');
$datetime=explode(" ",$datetime);
$separado['date']=$datetime[0];
$separado['hora']=$datetime[1];
$fecha['hora']=$separado['hora'];
$fecha['dia']=$date[2];
$fecha['mes']=$date[1];
$fecha['anio']=$date[0];
$strHora=$fecha['hora'];
return $strHora;
}
//función para restar días
function restarDias($days)
{
return date("Y-m-d h:i:s", mktime (0,0,0,date("m"),date("d")-$days,date("Y")));
}
/**
* Calcula la diferencia para dos fechas dadas, y retorna el resultado en una unidad especificada
*
* @param string Initial date (format: [YYYY-mm-dd hh:mm:ss], hh es en formato 24hrs )
* @param string Last date (format: [YYYY-mm-dd hh:mm:ss], hh es en formato 24hrs)
* @param caracter 'd' para obtener el resultado en días, 'h' para horas, 'm' para minutos, 's' para segundos, y 'a' para obtener un arreglo indexado de días, horas, minutos, y segundos
*
* @return mixed El resultado en la unidad especificada (float para todos los casos, excepto cuando unit='a', en el cual es un arreglo indexado), o nulo si no podría ser obtenido
*/
function obtenerDifereciaDeFechas($dateFrom, $dateTo, $unit = 'd'){
$difference = null;
$dateFromElements = split(' ', $dateFrom);
$dateToElements = split(' ', $dateTo);
$dateFromDateElements = split('-', $dateFromElements[0]);
$dateFromTimeElements = split(':', $dateFromElements[1]);
$dateToDateElements = split('-', $dateToElements[0]);
$dateToTimeElements = split(':', $dateToElements[1]);
// Obtiene timestamp de unix para ambos datos
$date1 = mktime($dateFromTimeElements[0], $dateFromTimeElements[1], $dateFromTimeElements[2], $dateFromDateElements[1], $dateFromDateElements[2], $dateFromDateElements[0]);
$date2 = mktime($dateToTimeElements[0], $dateToTimeElements[1], $dateToTimeElements[2], $dateToDateElements[1], $dateToDateElements[2], $dateToDateElements[0]);
if( $date1 > $date2 ){
return null;
}
$diff = $date2 - $date1;
$days = 0;
$hours = 0;
$minutes = 0;
$seconds = 0;
if ($diff % 86400 <= 0){ // Hay 86,400 seconds en un día
$days = $diff / 86400;
}
if($diff % 86400 > 0){
$rest = ($diff % 86400);
$days = ($diff - $rest) / 86400;
if( $rest % 3600 > 0 ){
$rest1 = ($rest % 3600);
$hours = ($rest - $rest1) / 3600;
if( $rest1 % 60 > 0 ){
$rest2 = ($rest1 % 60);
$minutes = ($rest1 - $rest2) / 60;
$seconds = $rest2;
}
else{
$minutes = $rest1 / 60;
}
}
else{
$hours = $rest / 3600;
}
}
switch($unit){
case 'd':
case 'D':
$partialDays = 0;
$partialDays += ($seconds / 86400);
$partialDays += ($minutes / 1440);
$partialDays += ($hours / 24);
$difference = $days + $partialDays;
break;
case 'h':
case 'H':
$partialHours = 0;
$partialHours += ($seconds / 3600);
$partialHours += ($minutes / 60);
$difference = $hours + ($days * 24) + $partialHours;
break;
case 'm':
case 'M':
$partialMinutes = 0;
$partialMinutes += ($seconds / 60);
$difference = $minutes + ($days * 1440) + ($hours * 60) + $partialMinutes;
break;
case 's':
case 'S':
$difference = $seconds + ($days * 86400) + ($hours * 3600) + ($minutes * 60);
break;
case 'a':
case 'A':
$difference = array (
"days" => $days,
"hours" => $hours,
"minutes" => $minutes,
"seconds" => $seconds
);
break;
}
return $difference;
}
//recibe un datetime del tipo yyyy-mm-dd hh:mm:ss e imprime: (dia) de (mes) de (año)
function fechaDatetimePlus1Mes($datetime){
$fecha=array('dia','mes','anio','hora');
$separado=array('date','hora');
$datetime=explode(" ",$datetime);
$separado['date']=$datetime[0];
$separado['hora']=$datetime[1];
$date=explode("-",$separado['date']);
$fecha['hora']=$separado['hora'];
$fecha['dia']=$date[2];
$fecha['mes']=$date[1];
$fecha['anio']=$date[0];
if($fecha['mes']=="01"){
if($fecha['dia']==29||$fecha['dia']==30||$fecha['dia']==31){
$mes="Marzo";
$fecha['dia']=1;
}
else{
$mes="Febrero";
}
}
if($fecha['mes']=="02"){$mes="Marzo";}
if($fecha['mes']=="03"){
if($fecha['dia']==31){
$mes="Mayo";
$fecha['dia']=1;
}
else{
$mes="Abril";
}
}
if($fecha['mes']=="04"){$mes="Mayo";}
if($fecha['mes']=="05"){
if($fecha['dia']==31){
$mes="Julio";
$fecha['dia']=1;
}
else{
$mes="Junio";
}
}
if($fecha['mes']=="06"){$mes="Julio";}
if($fecha['mes']=="07"){$mes="Agosto";}
if($fecha['mes']=="08"){
if($fecha['dia']==31){
$mes="Octubre";
$fecha['dia']=1;
}
else{
$mes="Septiembre";
}
}
if($fecha['mes']=="09"){$mes="Octubre";}
if($fecha['mes']=="10"){
if($fecha['dia']==31){
$mes="Diciembre";
$fecha['dia']=1;
}
else{
$mes="Noviembre";
}
}
if($fecha['mes']=="11"){$mes="Diciembre";}
if($fecha['mes']=="12"){$mes="Enero";}
$strfecha=$fecha['dia']." de ".$mes." de ".$fecha['anio'];
return $strfecha;
}
function dia($date){
$fecha=array('dia1','mes1','anio1');
$date=explode("-",$date);
$fecha['dia1']=$date[2];
$strdia=$fecha['dia1'];
return $strdia;
}
function mes3($date){
$fecha2=array('dia3','mes3','anio3');
$date=explode("-",$date);
$fecha3['dia3']=$date[2];
$fecha3['mes3']=$date[1];
$fecha3['anio3']=$date[0];
if($fecha3['mes3']=="01"){$mes3="Enero";}
if($fecha3['mes3']=="02"){$mes3="Febrero";}
if($fecha3['mes3']=="03"){$mes3="Marzo";}
if($fecha3['mes3']=="04"){$mes3="Abril";}
if($fecha3['mes3']=="05"){$mes3="Mayo";}
if($fecha3['mes3']=="06"){$mes3="Junio";}
if($fecha3['mes3']=="07"){$mes3="Julio";}
if($fecha3['mes3']=="08"){$mes3="Agosto";}
if($fecha3['mes3']=="09"){$mes3="Septiembre";}
if($fecha3['mes3']=="10"){$mes3="Octubre";}
if($fecha3['mes3']=="11"){$mes3="Noviembre";}
if($fecha3['mes3']=="12"){$mes3="Diciembre";}
$strmes3=$mes3;
return $strmes3;
}
function anio($date){
$fecha=array('dia1','mes1','anio1');
$date=explode("-",$date);
$fecha['anio1']=$date[0];
$stranio=$fecha['anio1'];
return $stranio;
}
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));
}
function sumaFechas($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));
}
function restarFechas($date1, $date2){
$s = strtotime($date1)-strtotime($date2);
$d = intval($s/86400);
$s -= $d*86400;
$h = intval($s/3600);
$s -= $h*3600;
$m = intval($s/60);
$s -= $m*60;
$dif= (($d*24)+$h).hrs." ".$m."min";
$dif2= $d.$space.dias." ".$h.hrs." ".$m."min";
return $dif2*(-1);
}
function RestarHoras($horaini,$horafin)
{
$horai=substr($horaini,0,2);
$mini=substr($horaini,3,2);
//$segi=substr($horaini,6,2);
$horaf=substr($horafin,0,2);
$minf=substr($horafin,3,2);
//$segf=substr($horafin,6,2);
$ini=((($horai*60)*60)+($mini*60)/*+$segi*/);
$fin=((($horaf*60)*60)+($minf*60)/*+$segf*/);
$dif=$fin-$ini;
$difh=floor($dif/3600);
$difm=floor(($dif-($difh*3600))/60);
//$difs=$dif-($difm*60)-($difh*3600);
return date("H:i",mktime($difh,$difm));
//return date("H-i-s",mktime($difh,$difm,$difs));
}
function sumaMesesAFechaActual($cantidadDeMeses){
$fecha = date("Y-m-d");
$enunmes = explode ( "-", $fecha );
//echo $fecha."<br/>";
$sumaMeses = mktime ( 0, 0, 0, date("$enunmes[1]") + $cantidadDeMeses, date("$enunmes[2]"), date("$enunmes[0]") );
$total=date ("Y-m-d", $sumaMeses);
return $total;
}
function sumaDiasAFechaActual($cantidadDeDias){
$fecha = date("Y-m-d");
$enNdias = explode ( "-", $fecha );
//echo $fecha."<br/>";
$sumaDias = mktime ( 0, 0, 0, date("$enNdias[1]"), date("$enNdias[2]") + $cantidadDeDias, date("$enNdias[0]") );
$total=date ("Y-m-d", $sumaDias);
return $total;
}
function restaDiasAFechaActual($cantidadDeDias){
$fecha = date("Y-m-d");
$enNdias = explode ( "-", $fecha );
//echo $fecha."<br/>";
$sumaDias = mktime ( 0, 0, 0, date("$enNdias[1]"), date("$enNdias[2]") - $cantidadDeDias, date("$enNdias[0]") );
$total=date ("Y-m-d", $sumaDias);
return $total;
}
function sumaDiasAFechaDatetime($cantidadDeDias,$datetime){
$datetime=explode(" ",$datetime);
$fecha=$datetime[0];
$enNdias = explode ( "-", $fecha );
//echo $fecha."<br/>";
$sumaDias = mktime ( 0, 0, 0, date("$enNdias[1]"), date("$enNdias[2]") + $cantidadDeDias, date("$enNdias[0]") );
$total=date ("Y-m-d", $sumaDias);
return $total;
}
function diferenciaEntreDatetimes($dt1,$dt2){
$y1 = substr($dt1,0,4);
$m1 = substr($dt1,5,2);
$d1 = substr($dt1,8,2);
$h1 = substr($dt1,11,2);
$i1 = substr($dt1,14,2);
$s1 = substr($dt1,17,2);
$y2 = substr($dt2,0,4);
$m2 = substr($dt2,5,2);
$d2 = substr($dt2,8,2);
$h2 = substr($dt2,11,2);
$i2 = substr($dt2,14,2);
$s2 = substr($dt2,17,2);
$r1=date('U',mktime($h1,$i1,$s1,$m1,$d1,$y1));
$r2=date('U',mktime($h2,$i2,$s2,$m2,$d2,$y2));
return ($r1-$r2);
}