在PHP中处理一组工作时间时计算日期差

在PHP中处理一组工作时间时计算日期差,php,time,intervals,difference,Php,Time,Intervals,Difference,我正在开发一个服务台应用程序。用户创建罚单,我正试图找出如何按时间编码到期 假设我有一个工作时间数组,如下所示: $bh['Monday']['start_time'] = "8:00am" $bh['Monday']['end_time'] = "5:00pm" $bh['Tuesday']['start_time'] = "8:00am" $bh['Tuesday']['end_time'] = "5:00pm" $bh['Wednesday']['start_time'] = "8:00a

我正在开发一个服务台应用程序。用户创建罚单,我正试图找出如何按时间编码到期

假设我有一个工作时间数组,如下所示:

$bh['Monday']['start_time'] = "8:00am"
$bh['Monday']['end_time'] = "5:00pm"
$bh['Tuesday']['start_time'] = "8:00am"
$bh['Tuesday']['end_time'] = "5:00pm"
$bh['Wednesday']['start_time'] = "8:00am"
$bh['Wednesday']['end_time'] = "5:00pm"
$bh['Thursday']['start_time'] = "8:00am"
$bh['Thursday']['end_time'] = "5:00pm"
$bh['Friday']['start_time'] = "8:00am"
$bh['Friday']['end_time'] = "5:00pm"
和一个带假日的数组:

$holidays = array("Dec 25th","Nov 24th")
我还有两个其他变量:

$resolve_within = "5";
$resolve_within_duration = "days";
到目前为止,我所拥有的:

$resolve_within = "5";
$resolve_within_duration = "days";
$holidays = array("Dec 25th","Nov 24th")

$bh['Monday']['start_time'] = "8:00am"
$bh['Monday']['end_time'] = "5:00pm"
$bh['Tuesday']['start_time'] = "8:00am"
$bh['Tuesday']['end_time'] = "5:00pm"
$bh['Wednesday']['start_time'] = "8:00am"
$bh['Wednesday']['end_time'] = "5:00pm"
$bh['Thursday']['start_time'] = "8:00am"
$bh['Thursday']['end_time'] = "5:00pm"
$bh['Friday']['start_time'] = "5:00pm"
$bh['Friday']['end_time'] = "5:00pm"


$start = new DateTime('now'); //when the ticket is created
$end = new DateTime('now');
$end->modify('+'.$resolve_within.' '.$resolve_within_duration); //this is essentially the due by time, adding 5 days to 'now'


$interval = $end->diff($start);

// total days
$days = $interval->days;

// create an iterateable period of date (P1D equates to 1 day)
$period = new DatePeriod($start, new DateInterval('P1D'), $end);

foreach($period as $dt) {
    $curr = $dt->format('D');

    //adjust days for holidays
    if (in_array($dt->format('M jS'), $holidays)) {
       $days--;
    }
}

echo "Ticket is due in $days days.";
因此,给定开始日期和结束日期,我如何计算到期时间,不包括
$holidays
数组中的日期,还考虑
$bh
(营业时间)数组中的时间和天数

例如,如果有人在2016年8月23日星期三下午3:00创建了一张票,而星期五有一个假期。截止时间为2016年11月8日星期四下午3点。还要记住,持续时间可以是小时,而不是天


例如,某些票证被标记为“紧急”,因此$resolve\u in \u值可能为“4”,而$resolve\u in \u duration值将为“小时”

您能更具体地告诉我们您的卡在哪里吗?似乎您的算法应该是在创建时间上增加5天(解析时间),然后在假日内修改+1d(重复),如果不是在营业时间内,则修改+1h(重复)。另外,最好有一个“周末”数组,这样你就可以在每周的非运营日一次增加+1d。我不知道如何在foreach循环中实现“营业时间”数组。(更新了我上面的评论)。大体上,我想说还有另一个循环。风格点:社区更喜欢这里的帖子标题不加标签,即
、PHP
PHP/Jquery/Mysql
等-您的问题历史记录表明了这一点!只要用普通语法的英语写标题就行了——如果你感兴趣的话,这里有几个关于Meta的相关讨论。@halfer,我明白了。你能更具体地告诉我们你遇到了什么困难吗?似乎您的算法应该是在创建时间上增加5天(解析时间),然后在假日内修改+1d(重复),如果不是在营业时间内,则修改+1h(重复)。另外,最好有一个“周末”数组,这样你就可以在每周的非运营日一次增加+1d。我不知道如何在foreach循环中实现“营业时间”数组。(更新了我上面的评论)。大体上,我想说还有另一个循环。风格点:社区更喜欢这里的帖子标题不加标签,即
、PHP
PHP/Jquery/Mysql
等-您的问题历史记录表明了这一点!只要用普通语法的英语写标题就行了,如果你感兴趣的话,这里有几个关于Meta的相关讨论。@halfer,明白了。