私はもはや私と一緒に働いていない人によってまとめられた会議室予約カレンダーをデバッグしています。非常に多くのことが間違っていたので、それは悪夢でしたが、私はこの最後のバグの原因を正確に突き止めることができません。カレンダーは、特定の時間に予約されている部屋があるかどうかをチェックし、適切な時間に予約されているような問題は表示されていませんが、ルームが空いてから1時間以内に同じ部屋を予約しようとすると、 DSTとの間でやりとりをすると、予約されたままの部屋が表示されます。 例:コード内の機能デバッグ中にDSTとのやりとりを考慮していないようです
- ユーザーは、11月29日午前9時から10時まで部屋が予約されていると見なします。
- ユーザーは、11月29日に午前10時30分から午後12時まで部屋を予約しようとします。
- カレンダーは、この2番目の要求をキャンセルし、その部屋がすでに予約済みであることをユーザーに通知します。
DST(11月4日)に移行する前にこれが発生することはありません。ここでは、部屋が空いているかどうかを決定する関数です:ここまでの
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;
}
私のタイムスタンプのすべてがUTCであると私は$odate
変数が実際にどこにもインスタンス化されることはありません気付いたが、私は決定することができていませんオフセットが正しく機能するためにはどの値を渡すべきか。私はそれがどんな種類の日付を望んでいるかを知ることができれば、残りの部分を作業することができます。
$ odateが設定されていないようです。これは、DateTimeの呼び出しにNULLが渡されることを意味します)を既定の 'now'として処理する必要があります。日付( 'I')を使用してDSTをテストし、それに従ってオフセットをオフセットすることができます。 – Gavin
サーバー上のすべての警告を有効にしましたか?すなわち、 'error_reporting(-1); ini_set( 'display_errors'、 'On'); ' –