Bueno, vamos a ver...
Lo primero que debes tomar en cuenta es la lógica a la hora de determinar el tipo de tratamiento que darás a tus variables de fecha en todo tu site.
PRIMER PUNTO
Todas (y me refiero a todas) las fechas de tu sitio deben seguir la misma norma, es decir, las fechas y horas que almacenes en las BD deben corresponder a la misma zona horaria.
SEGUNDO PUNTO
El procedimiento de conversión que utilices para leer y desplegar las fechas (ya sea sumar horas o restarlas) debes tomarlo en cuenta al almacenar los valores nuevos. Por ejemplo, es conveniente que todas tus fechas la almacenes como horas GMT, para que al momento de desplegarlos sepas exactamente cuantas horas debes agregar o restar.
TERCER PUNTO
Si tu BD ya tiene registros de hora o fecha, por ejemplo basadas en su antiguo servidor, debes decidir si las conviertes todas a GMT o si los nuevos registros que insertes los vas a convertir a la zona horaria de tu server anterior.
Una vez que todo este unificado, puedes hacer una funcion muy simple que agregue las horas necesarias para que funcione como tu lo esperas, por ejemplo:
Código PHP:
<?
function fechaOK($fecha) {
$offset_horas=6;
$offset_min=20;
$tm=strtotime($fecha);
$hr=date("G",$tm) + $offset_horas;
$mn=date("i",$tm) + $offset_min;
$sg=date("s",$tm);
$di=date("d",$tm);
$me=date("m",$tm);
$an=date("Y",$tm);
$fechanueva=mktime($hr,$mn,$sg,$me,$di,$an);
return $fechanueva;
}
echo date ("Y/m/d G:i:s",fechaOK("2003/05/25 21:13:01"));
?>
Esto te devuelve:
2003/05/26 3:33:01