Colección de funciones de fechas, operaciones entre fechas, formatos de fechas… etc.
function fecha_actual($fecha_actual){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Obtener la fecha actual de la forma de BDD aaaa-mm-dd
$fecha_actual = time();
$dia = date("d", $fecha_actual);
$mes = date("m", $fecha_actual);
$ano = date("Y", $fecha_actual);
$fecha_actual=$ano.'-'.$mes.'-'.$dia;
return $fecha_actual;
}
//************************************************************
function hora_actual($hora_actual){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Obtener la hora actual (24h) de la forma HHMM
$fecha_actual = time();
$hora = date("H", $fecha_actual);
$minutos = date("i", $fecha_actual);
$hora_actual=$hora.$minutos;
return $hora_actual;
}
//************************************************************
function fecha_barras($cadena_fecha){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// convertir una fecha de la forma aaaa-mm-dd a dd/mm/aaaa
$dia = substr ($cadena_fecha, 8, 2);
$mes = substr ($cadena_fecha, 5, 2);
$ano = substr ($cadena_fecha, 0, 4);
$cadena_fecha=$dia.'-'.$mes.'-'.$ano;
if ($dia){
return $cadena_fecha; }
}
//************************************************************
function fecha_barras_corta($cadena_fecha){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// convertir una fecha de la forma aaaa-mm-dd a dd/mm/aa
$dia = substr ($cadena_fecha, 8, 2);
$mes = substr ($cadena_fecha, 5, 2);
$ano = substr ($cadena_fecha, 2, 2);
$cadena_fecha=$dia.'/'.$mes.'/'.$ano;
if ($dia){
return $cadena_fecha;}
}
//************************************************************
function nombre_mes($mes){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Devuelve el nombre del mes a partir de su numero (de 1 a 12)
switch ($mes)
{
case 1: $mes="Enero"; break;
case 2: $mes="Febrero"; break;
case 3: $mes="Marzo"; break;
case 4: $mes="Abril"; break;
case 5: $mes="Mayo"; break;
case 6: $mes="Junio"; break;
case 7: $mes="Julio"; break;
case 8: $mes="Agosto"; break;
case 9: $mes="Septiembre"; break;
case 10: $mes="Octubre"; break;
case 11: $mes="Noviembre"; break;
case 12: $mes="Diciembre"; break;
}
return $mes;
}
//************************************************************
function formato_fecha($cadena_fecha){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// convertir una fecha de la forma aaaa-mm-dd a (dia de mes de año)
$dia = substr ($cadena_fecha, 8, 2);
$mes = substr ($cadena_fecha, 5, 2);
$ano = substr ($cadena_fecha, 0, 4);
switch ($mes)
{
case 1: $mes="enero"; break;
case 2: $mes="febrero"; break;
case 3: $mes="marzo"; break;
case 4: $mes="abril"; break;
case 5: $mes="mayo"; break;
case 6: $mes="junio"; break;
case 7: $mes="julio"; break;
case 8: $mes="agosto"; break;
case 9: $mes="septiembre"; break;
case 10: $mes="octubre"; break;
case 11: $mes="noviembre"; break;
case 12: $mes="diciembre"; break;
}
if ($dia<10)
$dia = substr ($dia, -1); // mostramos el dia sin el cero delantero
$cadena_fecha=$dia.' de '.$mes.' de '.$ano;
if ($dia){
return $cadena_fecha; }
}
//************************************************************
function fecha_corta($cadena_fecha){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// convertir una fecha de la forma aaaa-mm-dd a fecha de la forma
// (dd nombre_mes_corto). Ej: "25 Dic"
$dia = substr ($cadena_fecha, 8, 2);
$mes = nombre_mes(substr ($cadena_fecha, 5, 2)); # Funcion requerida nombre_mes($mes)
$mes = substr ($mes, 0, 3);
$dia=(int)$dia;
$cadena_fecha=$dia.' '.$mes;
if ($dia){
return $cadena_fecha; }
}
//************************************************************
function calcula_numero_dia_semana($dia,$mes,$ano){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Devuelve el número de día de la semana (1=lunes, 7=domingo...)
// a partir de una fecha dada, pasandole el dia, el mes y el año
$numerodiasemana = date('w', mktime(0,0,0,$mes,$dia,$ano));
if ($numerodiasemana == 0)
$numerodiasemana = 6;
else
$numerodiasemana--;
return $numerodiasemana;
}
//************************************************************
function dia_semana($dia,$mes,$ano){
/* Autor: Dani Mayandía 'Zagalet' (2005)
owww.zagalet.comcorreo@zagalet.com */
// Devuelve el día (primera letra) de la semana a partir
// de una fecha dada, pasandole el dia, el mes y el año
$numerodiasemana = date('w', mktime(0,0,0,$mes,$dia,$ano));
if ($numerodiasemana == 0)
$numerodiasemana = 6;
else
$numerodiasemana--;
$numerodiasemana++;
switch ($numerodiasemana)
{
case "1": return 'L'; break;
case "2": return 'M'; break;
case "3": return 'X'; break;
case "4": return 'J'; break;
case "5": return 'V'; break;
case "6": return 'S'; break;
case "7": return 'D'; break;
}
}
//************************************************************
function ultimodia($mes,$ano){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Devuelve cual es el ultimo día de un mes (28, 29, 30 o 31)
// a partir del numero de mes y el año
$ultimo_dia=28;
while (checkdate($mes,$ultimo_dia + 1,$ano)){
$ultimo_dia++; }
return $ultimo_dia;
}
//************************************************************
function fecha_segundos($fecha){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Devuelve la cadena en forma de segundos a partir de una fecha de la forma aaaa-mm-dd
$HH1=0;
$MM1=0;
$SS1=0;
$m1=substr ($fecha, 5, 2);
$d1=substr ($fecha, 8, 2);
$a1=substr ($fecha, 0, 4);
$fecha_out = mktime($HH1,$MM1,$SS1,$m1,$d1,$a1); //HH,MM,SS,MM,DD,AA
return $fecha_out;
}
//************************************************************
function operacion_fechas($fecha1,$operacion,$fecha2){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Devuelve los dias (puede devolver horas o minutos tambien)
// a partir de dos fechas de la forma aaaa-mm-dd y un operador artmetico ( "+" o "-" )
// Operaciones: $operacion (+ o -) suma o resta
// datos $fecha recibida en tipo mysql aaaa-mm-dd
//$fecha1
$HH1=0;
$MM1=0;
$SS1=0;
$m1=substr ($fecha1, 5, 2);
$d1=substr ($fecha1, 8, 2);
$a1=substr ($fecha1, 0, 4);
//$fecha2
$HH2=0;
$MM2=0;
$SS2=0;
$m2=substr ($fecha2, 5, 2);
$d2=substr ($fecha2, 8, 2);
$a2=substr ($fecha2, 0, 4);
$fecha1 = mktime($HH1,$MM1,$SS1,$m1,$d1,$a1); //HH,MM,SS,MM,DD,AA
$fecha2 = mktime($HH2,$MM2,$SS2,$m2,$d2,$a2); //HH,MM,SS,MM,DD,AA
if ($operacion=='+')
$operacion=$fecha1+$fecha2;
if ($operacion=='-')
$operacion=$fecha1-$fecha2;
$minutos=(int)($operacion/(60));
$horas=(int)($operacion/(60*60));
$dias=(int)($operacion/(60*60*24));
return $dias; //La usamos para que devuelva dias,
// pero lo dejo preparado para que devuelva horas y minutos
}
//************************************************************
function operacion_dias($fecha1,$operacion,$dias){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Partiendo de una fecha de la forma aaaa-mm-dd, de un numero X
// de dias y un operador artmetico ( "+" o "-" ) te devuelve la fecha resultado
// a la que le hemos sumado o restado X dias
// Operaciones: $operacion (+ o -) suma o resta
// datos $fecha1 recibida en tipo mysql aaaa-mm-dd
//$fecha1
$HH1=0;
$MM1=0;
$SS1=0;
$m1=substr ($fecha1, 5, 2);
$d1=substr ($fecha1, 8, 2);
$a1=substr ($fecha1, 0, 4);
$fecha1 = mktime($HH1,$MM1,$SS1,$m1,$d1,$a1); //HH,MM,SS,MM,DD,AA
$dias=$dias*24*3600; //a segundos
if ($operacion=='+')
$operacion=$fecha1+$dias;
if ($operacion=='-')
$operacion=$fecha1-$dias;
$dia = date("d", $operacion);
$mes = date("m", $operacion);
$ano = date("Y", $operacion);
$fecha=$ano.'-'.$mes.'-'.$dia;
return $fecha; //Devuelve la fecha a la que le hemos sumado o restado x dias
}
//************************************************************
function calcular_dias_fin_semana($fecha1,$fecha2) {
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Devuelve el numero de dias que son sabado o domingo entre
// la fecha1 y la fecha2 (las dos de la forma aaaa-mm-dd)
$total_dias=0;
# se requiere la funcion operacion_dias($fecha1,$operacion,$dias)
for ( $date=$fecha1; $date<=$fecha2; $date=operacion_dias($date,'+',1) )
{
$mes=substr ($date, 5, 2);
$dia=substr ($date, 8, 2);
$any=substr ($date, 0, 4);
$letra_dia=dia_semana($dia,$mes,$any);
if ( ($letra_dia=='S') or ($letra_dia=='D') ) //comprobamos si fin de semana
$total_dias++;
}
return $total_dias;
}
//************************************************************
function operacion_anys($fecha1,$operacion,$anys){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Partiendo de una fecha de la forma aaaa-mm-dd, de un numero
// X de años y un operador artmetico ( "+" o "-" ) te devuelve la fecha resultado
// a la que le hemos sumado o restado X años
// Operaciones: $operacion (+ o -) suma o resta
// datos $fecha1 recibida en tipo mysql aaaa-mm-dd
//$fecha1
$m1=substr ($fecha1, 5, 2);
$d1=substr ($fecha1, 8, 2);
$a1=substr ($fecha1, 0, 4);
if ($anys<1)
{
$meses=(int)($anys*12);
if ($operacion=='+')
{ $m1=$m1+$meses;
if ($m1>12) { $m1=($m1-12); $a1++; }
}
if ($operacion=='-')
{ $m1=$m1-$meses;
if ($m1<=0) { $m1=(12-$m1); $a1--; }
}
}
else
{
if ($operacion=='+')
$a1=$a1+$anys;
if ($operacion=='-')
$a1=$a1-$anys;
}
if ( (!checkdate($m1,$d1,$a1)) and ($d1==29) and ($m1==2) ) $d1=28; //comprobacion de año bisiesto
if ($a1<10) $a1='0'.(int)$a1;
if ($m1<10) $m1='0'.(int)$m1;
$fecha=$a1.'-'.$m1.'-'.$d1;
return $fecha; //Devuelve la fecha a la que le hemos
// sumado o restado x años
}
//************************************************************
function comprobar_fecha($fecha){
/* Autor: Dani Mayandía 'Zagalet' (2005)
www.zagalet.comcorreo@zagalet.com */
// Le pasamos una fecha de la forma aaaa-mm-dd y la devuelve si es correcta o devuelve 0 si es una fecha incorrecta o imposible
$correcto=0;
$m1=substr ($fecha, 5, 2);
$d1=substr ($fecha, 8, 2);
$a1=substr ($fecha, 0, 4);
$correcto=checkdate($m1,$d1,$a1);
return $correcto;
}
// Devuelve todas las fechas de entre un rango de dos fechas
function dates_inbetween($date1, $date2){
$day = 60*60*24;
$date1 = strtotime($date1);
$date2 = strtotime($date2);
$days_diff = round(($date2 - $date1)/$day); // Unix time difference devided by 1 day to get total days in between
$dates_array = array();
$dates_array[] = date('Y-m-d',$date1);
for($x = 1; $x < $days_diff; $x++){
$dates_array[] = date('Y-m-d',($date1+($day*$x)));
}
$dates_array[] = date('Y-m-d',$date2);
return $dates_array;
}
// Us
$dates_array = dates_inbetween('2001-12-28', '2002-01-01');

