gpt4 book ai didi

php - 我正在调试的代码中的函数似乎没有考虑到夏令时的变化

转载 作者:可可西里 更新时间:2023-11-01 06:38:37 24 4
gpt4 key购买 nike

我正在调试一个 session 室预订日历,该日历是由不再与我合作的某个人整理的。这是一场噩梦,因为它有很多问题,但我无法弄清楚到底是什么导致了最后一个错误。日历会检查房间是否已经在特定时间被预订,并且在正确的时间显示为已预订没有问题,但如果有人在房间腾空后一小时或更短时间内尝试预订同一房间转换为夏令时或从夏令时转换,它显示房间仍被预订。示例:

  • 用户看到预订了 11 月 29 日上午 9 点到 10 点的房间。
  • 然后,用户尝试预订 11 月 29 日上午 10:30 至中午 12:00 的房间。
  • 日历取消第二个请求并通知用户房间已经预订。

应该注意的是,在夏令时(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 为 null,默认为 now 为您提供当前偏移量。您想要的是设置时间表时的偏移量,而不是此时的偏移量。看起来你的数据库日期是山区时间,你的开始日期是 utc,你正在减去偏移量以回到山区(我认为你会添加偏移量而不是减去,所以我可能会颠倒这个,你能查询吗你的数据库并弄清楚?)

无论如何,您应该使用 $startdate 而不是 now() 来计算偏移量,尝试将 $startdate 换成 $odate,看看会发生什么。如果这不起作用,请尝试从 startdate 构建一个字符串,然后从该字符串生成一个新日期。如果没有其他输出该字符串应该让您清楚地了解 $startdate 是 UTC 还是 mountain

关于php - 我正在调试的代码中的函数似乎没有考虑到夏令时的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12789879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com