Estoy depurando un calendario de reserva de sala de conferencia que fue creado por alguien que ya no trabaja conmigo. Ha sido una pesadilla ya que había tantas cosas mal con eso, pero estoy teniendo problemas para averiguar exactamente qué está causando este último error. El calendario verifica si las habitaciones ya han sido reservadas en ciertos momentos y no están teniendo un problema como reservado en el momento adecuado, pero si alguien intenta reservar la misma habitación una hora o menos después de que la habitación se desocupe después de una cambiar hacia o desde el horario de verano, muestra la habitación como reservada aún. Ejemplo:La función en el código Estoy depurando parece no tener en cuenta los cambios hacia y desde DST
- usuario ve que una habitación se reserva para 29 de noviembre de 09 a.m.-10 a.m..
- El usuario intenta reservar la habitación el 29 de noviembre de 10:30 a.m. a 12:00 p.m.
- El calendario cancela esta segunda solicitud e informa al usuario que la habitación ya está reservada.
Cabe señalar que esto no ocurre en ningún momento antes del cambio a DST (4 de noviembre). Aquí está la función que determina si la habitación está disponible:
function calCheck($starttime, $endtime, $cal_name, $cat_id, $myDB, $myHost, $myUser, $myPass) {
$timezone = 'America/Denver';
date_default_timezone_set ($timezone);
$dset = new DateTime($odate, new DateTimeZone($timezone));
$dset2 = $dset->getOffset();
//$starttime = $starttime + 1;
//$endtime = $endtime - 1;
$starttime = $starttime - $dset2 + 1;
$endtime = $endtime - $dset2 - 1;
$starttime = $starttime;
$endtime = $endtime;
//echo $starttime .'</br>'. $endtime . '</br>';
$db = new myDB($myDB, $myHost, $myUser, $myPass);
$db->myDB_Connect();
//echo 'calcheck</br>';
$ck_query = 'SELECT * FROM vw_cal_chk
WHERE (stime < '. $starttime . ' AND etime > ' . $starttime . ') and Calendar = "' . $cal_name . '" and cat_id = "' .$cat_id . '"
OR (stime < ' . $endtime . ' AND etime > ' . $endtime . ') and Calendar = "' . $cal_name . '" and cat_id = "' .$cat_id . '"
OR (stime >= '. $starttime . ' AND etime < ' . $endtime .') and Calendar = "' . $cal_name . '" and cat_id = "' .$cat_id . '"';
$ck_result = $db->myQuery($ck_query);
$num = mysql_num_rows($ck_result);
//echo $ck_query . '</br>' . $num;
if ($num >> 0){
$avail = 1;
} else {
$avail = 0;
}
return $avail;
}
Todos mis marcas de tiempo hasta este punto están en UTC y noto la variable $odate
es en realidad nunca se crea una instancia en cualquier lugar, pero no he sido capaz de determinar qué valor para pasarlo para que la compensación funcione correctamente. Si puedo averiguar qué tipo de fecha quiere, debería poder resolver el resto.
Me parece $ Odate no está definido lo que significa la llamada a DateTime se pasa nula que sospecho (si funciona en absoluto) debe ser procesado como el predeterminado 'ahora'. Puede probar el horario de verano usando la fecha ('I') y luego compensar sus desplazamientos en consecuencia. – Gavin
¿Ha intentado habilitar todas las advertencias en su servidor? es decir 'error_reporting (-1); ini_set ('display_errors', 'On'); ' –