miércoles, 13 de junio de 2007

dateAdd y dateDiff en PHP

SQL Server tiene 2 funciones buenisimas para el calculo de fechas, DATEADD y DATEDIFF.

Emulando el comportamiento de estas funciones (probablemente de forma mala), les presento mi adaptación de estos métodos a PHP.

#------------------
# add values to a date array and return the new date!.
function dateAdd($date,$p_param, $value){
return genericDateOperation($date,$p_param,$value,1);
}

#------------------
# remove values to a date array and return the new date!.
function dateDiff($date,$p_param,$value){
return genericDateOperation($date,$p_param,$value,-1);
}

#------------------
# generic operation date function
function genericDateOperation($date,$p_param,$value,$operation){
$arr = getDateArray($date);
$arr[$p_param] = $arr[$p_param] + ($value*$operation);
return getDateFromArray($arr);
}
Funciones auxiliares

Esto funciona gracias a la función mktime

#------------------
# return array from a date.
function getDateFromArray($array){

$temp = mktime( $array['hour'],
$array['minute'],
$array['second'],
$array['month'],
$array['day'],
$array['year']);
return date(getDateFormat(),$temp);
}

estas 2
funciones que siguen son dependientes, si se cambia el formato de la fecha (método getFormat), se debería cambiar la forma de obtener el array.

#------------------
#
return array from a date with format Y-m-d h:i:s
function getDateArray($date){
$arr['year'] = substr($date,0,4);
$arr['month'] = substr($date,5,2);
$arr['day'] = substr($date,8,2);
$arr['hour'] = substr($date,11,2);
$arr['minute'] = substr($date,14,2);
$arr['second'] = substr($date,17,2);

return $arr;
}

#------------------
# return mySQL format date
function getDateFormat(){
return "Y-m-d h:i:s";
}


de mas esta decir que $p_param puede ser year, month, day, hour,minute o second.

No hay comentarios: