<?php
 
function fecha_letra($fecha_con){
	$mes = (int) substr($fecha_con,3,2);
	$armes[1][]="01";
	$armes[1][]="ENERO";
	$armes[2][]="02";
	$armes[2][]="FEBRERO";
	$armes[3][]="03";
	$armes[3][]="MARZO";
	$armes[4][]="04";
	$armes[4][]="ABRIL";
	$armes[5][]="05";
	$armes[5][]="MAYO";
	$armes[6][]="06";
	$armes[6][]="JUNIO";
	$armes[7][]="07";
	$armes[7][]="JULIO";
	$armes[8][]="08";
	$armes[8][]="AGOSTO";
	$armes[9][]="09";
	$armes[9][]="SEPTIEMBRE";
	$armes[10][]="10";
	$armes[10][]="OCTUBRE";
	$armes[11][]="11";
	$armes[11][]="NOVIEMBRE";
	$armes[12][]="12";
	$armes[12][]="DICIEMBRE";
	$fec_sal = substr($fecha_con,0,2) . ' ' . $armes[$mes][1] .' ' . substr($fecha_con,6) ;
	return $fec_sal;
}

function chfecha($fecha,$formin='Y-m-d',$formout='d/m/Y'){
	
	/*Declaracion de mensajes de error*/
	define("MSJERRIN","Invalid input format",true);  //error formato entrada
	define("MSJERROUT","Invalid output format",true);//error formato salida
	define("MSJERRFEC","00/00/0000",true);   //error Fecha entrada
	
	/*Formatos de fecha*/
	define("ddmmyyyyS0","dmY");
	define("ddmmyyyyS1","d/m/Y");
	define("yyyymmddS2","Y-m-d");
	define("yyyymmddS1","Y/m/d");
	define("ddMMyyyyS1","d/M/Y");
	define("ddmmmyyyyS2","d-MMM-yy");	
	define("ddMMyyyyS3","d de M de Y");
	define("ddMMyyS3","d de M de y");
	define("ddMMyyyyS4","d de M del Y");
	define("MM","M");
	define("mm","mm");
	define("yyyy","Y");
	define("dd","dd");
	
	/*Declaración de variables*/
	$sep=array('','/','-',' de ', ' del ');//array de separadores
	$dia='00';    //Variable para dia
	$mes='00';    //Variable para mes
	$axo='0000';  //Variable para año
	$errfec=0;    //Bandera: error en fecha de entrada
	$errin=0;     //Bandera: error de formato entrada
	$errout=0;    //Bandera: error de formato salida
	$armes[1][0]="ENERO"; 		$armes[1][1]="01"; $armes[1][2]="ENE";
	$armes[2][0]="FEBRERO"; 	$armes[2][1]="02"; $armes[2][2]="FEB"; 
	$armes[3][0]="MARZO";		$armes[3][1]="03"; $armes[3][2]="MAR";
	$armes[4][0]="ABRIL";		$armes[4][1]="04"; $armes[4][2]="ABR"; 
	$armes[5][0]="MAYO";		$armes[5][1]="05"; $armes[5][2]="MAY";
	$armes[6][0]="JUNIO";		$armes[6][1]="06"; $armes[6][2]="JUN";
	$armes[7][0]="JULIO";		$armes[7][1]="07"; $armes[7][2]="JUL";
	$armes[8][0]="AGOSTO";		$armes[8][1]="08"; $armes[8][2]="AGO";
	$armes[9][0]="SEPTIEMBRE";	$armes[9][1]="09"; $armes[9][2]="SEP";
	$armes[10][0]="OCTUBRE";	$armes[10][1]="10";$armes[10][2]="OCT";
	$armes[11][0]="NOVIEMBRE";	$armes[11][1]="11";$armes[11][2]="NOV";
	$armes[12][0]="DICIEMBRE";	$armes[12][1]="12";$armes[12][2]="DIC";
	
	if($fecha==NULL || $fecha=="") $errfec=1;
	/*Separa dia, mes y año conforme al formato de entrada especificado en $formin*/
	switch($formin){
		case ddmmyyyyS1: //F: d/m/Y
				$dia=substr($fecha,0,2);
				$mes=substr($fecha,3,2);
				$axo=substr($fecha,6,4);
		break;
		case yyyymmddS2: //F:Y-m-d
				$dia=substr($fecha,8,2);
				$mes=substr($fecha,5,2);
				$axo=substr($fecha,0,4);
		break;
		case yyyymmddS1: //F: Y/m/d
				$dia=substr($fecha,8,2);
				$mes=substr($fecha,5,2);
				$axo=substr($fecha,0,4);
		break;
		case mm: //F: mes(dos digitos)
				$dia="";
				$mes=$fecha;
				$axo="";
		break;		
		default: 
			$errin=1;
		break;
	}
	/*Forma la fecha de salida conforme al formato de salida especificado en $formout*/
	switch($formout){
		case ddmmyyyyS0: //F: dmY
				$fecout="$dia"."$sep[0]"."$mes"."$sep[0]"."$axo";
		break;
		case ddmmyyyyS1: //F: d/m/Y
				$fecout="$dia"."$sep[1]"."$mes"."$sep[1]"."$axo";
		break;
		case yyyymmddS2: //F:Y-m-d
				$fecout=$axo.$sep[2].$mes.$sep[2].$dia;
		break;
		case ddMMyyyyS1:  //F: d/Mes con letra/Y
				$mes=(int)$mes;
				$fecout=$dia.$sep[1].$armes[$mes][0].$sep[1].$axo;
		break;
		case ddMMyyyyS3: //F: d de 'Mes con letra' de Y
				$mes=(int)$mes;
				$fecout=$dia.$sep[3].$armes[$mes][0].$sep[3].$axo;
		break;
		case ddMMyyS3: //F: d de 'Mes con letra' de Y
				$mes=(int)$mes;
				$fecout=$dia.$sep[3].$armes[$mes][0].$sep[3].substr($axo,2,2);
		break;

		case ddMMyyyyS4: //F: d de 'Mes con letra' del Y -->'de'
				$mes=(int)$mes;
				$fecout=$dia.$sep[3].$armes[$mes][0].$sep[3].$axo;
		break;
		case ddmmmyyyyS2://F: dd-(MES 3 LETRAS)-(AÑO 2 NUMEROS)
				$mes=(int)$mes;
				$fecout=$dia.$sep[2].$armes[$mes][2].$sep[2].substr($axo,2,2);
		break;		
		case MM: //'Mes con letra' 
				$mes=(int)$mes;
				$fecout=$armes[$mes][0];
		break;
		case mm: //'Mes numero' 
				$mes=(int)$mes;
				$fecout=$armes[$mes][1];
		break;
		case yyyy: //axo 4 digitos 
				$fecout=$axo;
		break;
		case dd: //dia 2 digitos 
				$fecout=$dia;
		break;
		
		default:
				$errout=1;
		break;
	}
	
	/*Retorno de conversion de fechas*/
	//if($errfec==0 && $errin==0 && $errout==0) return $fecout; //si formato entrada y salida validos
	if($errfec==1) return MSJERRFEC;
	elseif($errin==0 && $errout==1) return MSJERROUT;
	elseif($errin==1 && $errout==0) return MSJERRIN;
	elseif($errin==1 && $errout==1) return MSJERRIN.' , '.MSJERROUT;
	return $fecout; //si formato entrada y salida validos
}

function daydiff($fecfin,$fecini,$formin='Y-m-d'){
	if($formin==NULL || $formin=='') $formin='Y-m-d';//valor por defecto.
	//inicializar meses con su nuero de dias
	for($i=1;$i<=12; $i++){
		if($i<=7){
			if($i%2==0)$arndm[$i]=30;
			else $arndm[$i]=31;
		}
		else{
			if($i%2==0)$arndm[$i]=31;
			else $arndm[$i]=30;
		}
	}
	$arndm[2]=28;//Caso especial febrero(relativo al año)
	$datedif=0;//Inicialiar dias diferencia
	$axoini=(int)chfecha($fecini,$formin,'Y');
	$axofin=(int)chfecha($fecfin,$formin,'Y');
	$mesini=(int)chfecha($fecini,$formin,'mm');
	$mesfin=(int)chfecha($fecfin,$formin,'mm');
	$diaini=(int)chfecha($fecini,$formin,'dd');
	$diafin=(int)chfecha($fecfin,$formin,'dd');
	if($axoini==$axofin){//si años iguales
		if($axoini%4==0) $arndm[2]=29;
		if($mesini==$mesfin){//si años iguales meses iguales
			$datedif=$diafin-$diaini;
			return($datedif);
		}
		else{//si años iguales meses diferentes
			if($mesfin>$mesini){
				$datedif=diaentremeses($arndm,$mesini,$diaini,$mesfin,$diafin);
				return $datedif;
			}
			else{
				$datedif=daydiff($fecini,$fecfin,'');
				return (-1)*$datedif;
			}
		}
	}
	else{
		if($axofin>$axoini){
			$datedif=diaentreaxos($fecini,$fecfin);
			return $datedif;
		}
		else{
			$datedif=daydiff($fecini,$fecfin,'');
			return (-1)*$datedif;
		}
	}
}

function diaentremeses($arndm,$mesini,$diaini,$mesfin,$diafin){
	$datedif=0;
	$difmesini=$arndm[$mesini]-$diaini;
	for($i=$mesini+1;$i<$mesfin;$i++){
		$datedif=$datedif+$arndm[$i];
	}
	$datedif=$datedif+$difmesini+$diafin;
	return $datedif;
}
function diaentreaxos($fecini,$fecfin){
	$datedif=0;
	$axoini=(int)chfecha($fecini,'Y-m-d','Y');
	$axofin=(int)chfecha($fecfin,'Y-m-d','Y');
	$difaxoini=daydiff($axoini.'-12-'.'31',$fecini,'');
	$difaxofin=daydiff($fecfin,$axofin.'-01-'.'01','')+1;
	for($i=$axoini+1;$i<$axofin;$i++){
		if($axoini%4==0) $datedif=$datedif+366;
		else $datedif=$datedif+365;
	}
	$datedif=$datedif+$difaxoini+$difaxofin;
	return $datedif;
}

function whatDay($fecha,$tip='D'){//Y-m-d Ej.- 2004-08-01
	$fec=split("-",$fecha);
	$time=mktime(0,0,0,$fec[1],$fec[2],$fec[0]);
   	$dia_mes=date("D",$time);
   	$arrdias["Sun"][0]="DOMINGO";
   	$arrdias["Sun"][1]=1;
   	$arrdias["Mon"][0]="LUNES";
	$arrdias["Mon"][1]=2;
	$arrdias["Tue"][0]="MARTES";
	$arrdias["Tue"][1]=3;
	$arrdias["Wed"][0]="MIERCOLES";
	$arrdias["Wed"][1]=4;
	$arrdias["Thu"][0]="JUEVES";
	$arrdias["Thu"][1]=5;
	$arrdias["Fri"][0]="VIERNES";
	$arrdias["Fri"][1]=6;
	$arrdias["Sat"][0]="SABADO";
	$arrdias["Sat"][1]=7;
	if(strtoupper($tip)=='D')
   		return $arrdias[$dia_mes][0];
	else
		return $arrdias[$dia_mes][1];
}

function addDay($fecha,$ndias,$formato='Y-m-d'){
    $new_fecha=chfecha($fecha,$formato,'Y-m-d');
 	return date("Y-m-d",strtotime("$new_fecha ".$ndias." days"));         
}
function lessDay($fecha,$ndias,$formato='Y-m-d'){
    $new_fecha=chfecha($fecha,$formato,'Y-m-d');
 	return date("Y-m-d",strtotime("$new_fecha ".(-1*$ndias)." days"));         
}

function addMonth($fecha,$nmeses,$formato='Y-m-d'){
    $new_fecha=chfecha($fecha,$formato,'Y-m-d');
	$fec=explode("-",$new_fecha);
	$nueva = mktime(0,0,0,$fec[1]+$nmeses,$fec[2],$fec[0]);
    $nuevafecha=date("Y-m-d",$nueva);
    return ($nuevafecha);  
            
}

function dateCmp($fecha1,$fecha2){
   $fec1=split("-",$fecha1);
   $fec2=split("-",$fecha2);
   $dif = mktime(0,0,0,$fec1[1],$fec1[2],$fec1[0]) - mktime(0,0,0,$fec2[1],$fec2[2],$fec2[0]);
   return ($dif);                         
}

function addMinutes($hora,$minutos){
	if($minutos=='') $minutos=0;
	if($hora=='') $hora='00:00:00';
	list($hor, $min, $seg) = split('[:]', $hora); 
	$seg=0;
	//echo "HORA ".$hora."  MINUTOS: ".$minutos."<br>";
	$hora=date("H:i:s", mktime($hor, $min+$minutos, 0));
	return $hora;
}

function difTime($horaIni,$horaFin){
	if($horaIni=='')$horaIni='00:00:00';
	if($horaFin=='')$horaFin='00:00:00';
	list($horIni, $minIni, $segIni) = split('[:]', $horaIni);
	list($horFin, $minFin, $segFin) = split('[:]', $horaFin); 
	$hora=date("H:i:s", mktime($horFin-$horIni, $minFin-$minIni, $segFin-$segIni));
	return $hora;
}

function sumTime($horaIni,$horaFin){
	if($horaIni=='')$horaIni='00:00:00';
	if($horaFin=='')$horaFin='00:00:00';
	list($horIni, $minIni, $segIni) = split('[:]', $horaIni);
	list($horFin, $minFin, $segFin) = split('[:]', $horaFin); 
	$hora=date("H:i:s", mktime($horFin+$horIni, $minFin+$minIni, $segFin+$segIni));
	return $hora;
}
function cmpTime($horaIni,$horaFin){
	if($horaIni=='')$horaIni='00:00:00';
	if($horaFin=='')$horaFin='00:00:00';
	$horaIni=strtotime($horaIni);
	$horaFin=strtotime($horaFin);
	
	if($horaIni>$horaFin)
		return 1;
	elseif($horaIni==$horaFin)
		return 0;
	elseif($horaIni<$horaFin)
		return -1;
	return 0;
}
?>