检查日期是否在小时间隔或周末之间。如果没有,计算剩余可用小时数

时间:2013-05-22 13:13:35

标签: php

如果有人这么善良,我需要一些帮助。 我花了两天的时间试图制作一个脚本,告诉访问者技术支持在线状态。

办公时间为上午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;

1 个答案:

答案 0 :(得分: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分钟,直到我们打开。”。