gpt4 book ai didi

PHP Display营业时间

转载 作者:可可西里 更新时间:2023-10-31 23:41:56 24 4
gpt4 key购买 nike

我试图在基于 Wordpress 的网站上营业时显示通知,并从数据库中提取信息。数据被简单地存储为每天的开/关时间,作为单独的数据库条目。当时间在一天之内时,这是相当简单的。但对于酒吧/餐厅来说,它变得复杂,因为从技术上讲,关门时间是在第二天。我将以星期二为例。

$tuesdayopen = strtotime("10:00");
$tuesdayclose = strtotime("23:00");
$now = strtotime("now");

if ($now >= $tuesdayopen && $now <= $tuesdayclose) {
echo "We are open!";
} else {
echo "We are closed!";
}

所以这可以正常工作。如果关门时间到第二天,我也有一个不优雅的解决方案。

$tuesdayopen = strtotime("10:00");
$tuesdayclose = strtotime("02:00");
$now = strtotime("now");

if ($tuesdayclose >= strtotime("00:00") && $tuesdayclose <= strtotime("04:00")):
$tuesdayclose = strtotime("+1 day", $tuesdayclose);
endif;

if ($now >= $tuesdayopen && $now <= $tuesdayclose) {
echo "We are open!";
} else {
echo "We are closed!";
}

那么我的问题在哪里呢?问题是 $now 在午夜之后结束。因此,如果有人在星期二晚上访问该页面,午夜过后,严格来说是星期三早上。这意味着我的完整剧本将移至星期三。我需要它来识别它是在午夜和凌晨 4 点之间,因此,使用前几天的打开/关闭时间来确定它是否打开(但前提是关闭时间在午夜之后,否则继续到星期三是正确的去做)。希望我解释得很好。我曾尝试自己写一些东西,但代码是一团糟,最终无法正常工作。所以我不会费心把它包括在这里。

最佳答案

我会创建一个数组,其中包含该地点开放的时间并循环遍历该数组。额外的优势是,如果一个地方在午餐期间关闭,则很容易添加。

请注意,我将时间标准化为从星期一 00:00 开始计算秒数,无论时间是在未来还是过去。

<?php

// Normalize time to count from 0
function timeOfWeek($time) {
if (!is_int($time)) $time = strtotime($time) ;
$secondsInWeek = (7 * 24 * 3600);
return (($time - strtotime('monday 00:00')) % $secondsInWeek + $secondsInWeek) % $secondsInWeek;
}

function isOpen($opened, $time) {
$time = timeOfWeek($time);

foreach ($opened as $openday) {
list($open, $close) = $openday;

if ($open < $close) {
if ($time > $open && $time < $close) return true;
} else {
if ($time > $open || $time < $close) return true; // Special case sunday -> monday
}
}

return false;
}

$opened = array();
$opened[] = array(timeOfWeek('monday 10:00'), timeOfWeek('monday 23:00'));
$opened[] = array(timeOfWeek('tuesday 10:00'), timeOfWeek('tuesday 23:00'));
$opened[] = array(timeOfWeek('wednesday 10:00'), timeOfWeek('wednesday 23:00'));
$opened[] = array(timeOfWeek('thursday 10:00'), timeOfWeek('thursday 23:00'));
$opened[] = array(timeOfWeek('friday 10:00'), timeOfWeek('saturday 01:00'));
$opened[] = array(timeOfWeek('saturday 10:00'), timeOfWeek('sunday 01:00'));
$opened[] = array(timeOfWeek('sunday 10:00'), timeOfWeek('monday 01:00'));

$open = isOpen($opened, time());
var_dump($open);

关于PHP Display营业时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14115724/

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