0

如果有人这么好心,我需要一些帮助。两天来,我一直在绞尽脑汁,试图制作一个脚本,该脚本将告知访问者有关技术支持在线状态的信息。

办公时间为上午 10 点至晚上 18 点 30 分。如果访客在这个时间间隔内,很容易,消息将“在线”。如果他不在办公时间,我需要显示距离技术支持可用的剩余小时数,如果是周末或周五晚上,将显示另一条消息。

这是我的脚本,我真的不知道我错在哪里。任何帮助表示赞赏。谢谢。

$date2 = date("l", time());
$date3 = strtolower($date2);

$now = (int) date('Hi');
$time1 = 1000;
$time2 = 1830;

$currentTime = time();
if (date("G") >= 19 || (date("G") == 18 && date("i") > 00)) {
$datetime1 = 10 * 3600 + strtotime("now") + (24 - date("G")) * 3600 + 
(60 - date("i")) * 60;
} else {
$datetime1 = strtotime(date("Y-m-d") + " 10:00:00");
}

$interval = abs($datetime1 - $currentTime);
$hours = round($interval / 3600);

if (($date3 == "saturday") || ($date3 == "sunday")) {
$status = '<span style="color:#909090;">
OFFLINE. We\'ll be available on Monday    morning.</span>';
} elseif ($date3 == "friday") {
if ($now > $time2) {
    $status = '<span style="color:#909090;">
OFFLINE. We\'ll be available on     Monday morning.</span>';
} elseif ($now < $time1) {
    $status = '
<span style="color:#909090;">OFFLINE. We\'ll be online in about ' . $hours . ' hours.  </span>';
} else {
    $status = '<span style="color:#32a300;">ONLINE, solving customer issues. </span>';
}
} else {
if ($now > $time1 && $now < $time2) {
    $status = '<span style="color:#32a300;">ONLINE, solving customer issues.</span>';
} else {
    $status = '<span style="color:#909090;">OFFLINE. We\'ll be become online in about ' . $hours . ' hours.</span>';
}
}

echo $status;
4

1 回答 1

4

您是否考虑过使用DateTime该类重构您的代码?它与 PHP 5.2+ 兼容,通常是在 PHP 中处理日期的推荐方式。

$start_date = new \DateTime('today 10:00');
$end_date = new \DateTime('today 18:30');
$now = new \DateTime();

if ($now->format('N') >= 6) {
    // weekend
}

if ($start_date <= $now && $now < $end_date) {
    // office hours
} else {
    // closing hours
}

上面的例子更容易阅读/理解/调试,它省去了你自己手动进行所有计算和日期转换的麻烦。

Datetime课程还将允许您轻松计算 2 个单独日期之间的时间差:

$opening_time = new \DateTime('tomorrow 10:00');
$now = new \DateTime();

$time_difference = $now->diff($opening_time);
$remaining_time = $time_difference->format('%h hours, %i minutes');

echo $remaining_time . ' until we will open.';

这应该输出类似于“13 小时 15 分钟,直到我们将打开。”。

于 2013-05-22T13:21:41.183 回答