私と一緒に仕事をしていない人がまとめた会議室の予約カレンダーをデバッグしています。非常に多くの問題があったので悪夢のようでしたが、この最後のバグの原因を正確に突き止めるのに苦労しています. カレンダーは、部屋が特定の時間にすでに予約されているかどうかを確認し、適切な時間に予約済みとして表示される問題が発生していないことを確認します。 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
変数が実際にはどこにもインスタンス化されていないことに気付きましたが、オフセットが正しく機能するためにどの値を渡すかを決定できませんでした。それがどんな日付を望んでいるかを知ることができれば、残りを解決できるはずです.