Php 向字符串添加特定数量的工作日时间
我希望为字符串添加一定的时间,但跳过工作日。因此,例如,如果我想在时间戳Php 向字符串添加特定数量的工作日时间,php,Php,我希望为字符串添加一定的时间,但跳过工作日。因此,例如,如果我想在时间戳“2014-04-03 19:33:40”中添加40小时,它将返回“2014-04-07 11:33:40”(跳过周末) 我还需要用几天甚至几分钟来做这件事。以下是我提出的(非工作)函数: function expiration_date($opentime,$tfString) { switch($tfString) { case "daily" : $expira
“2014-04-03 19:33:40”
中添加40小时,它将返回“2014-04-07 11:33:40”
(跳过周末)
我还需要用几天甚至几分钟来做这件事。以下是我提出的(非工作)函数:
function expiration_date($opentime,$tfString)
{
switch($tfString)
{
case "daily" :
$expiration_date = gmdate('Y-m-d H:i:s', strtotime($opentime . ' + 10 weekdays'));
break;
case "4h":
$expiration_date = gmdate('Y-m-d H:i:s', strtotime($opentime . ' + 40 weekday hours'));
break;
case "1h":
$expiration_date = gmdate('Y-m-d H:i:s', strtotime($opentime . ' + 10 weekday hours'));
break;
case "30m":
$expiration_date = gmdate('Y-m-d H:i:s', strtotime($opentime . ' + 5 weekday hours'));
break;
case "15m":
$expiration_date = gmdate('Y-m-d H:i:s', strtotime($opentime . ' + 2.5 weekday hours'));
break;
default: $expiration_date = '0000-00-00 00:00:00';
}
return $expiration_date;
}
你在这里看到的是:
DateInterval()
。如果找不到,我们将返回默认时间DateInterval()
对象DateTime()
对象希望这对您有教育意义,并向您介绍PHP日期时间功能的强大功能。工作时间重要吗?不,只有工作日/工作日当我调用addRollover(“2014-03-26 00:00:00”,“daily”)时,我得到了“2014-04-07 00:00:00”,但我希望得到“2014-04-08 00:00:00”(10天)。知道为什么吗?我想不出来。再多尝试十次,如果您发现任何其他不一致的地方,请告诉我。这将有助于调试此问题。我打赌这是因为它跨越多个工作周。请查看我的更新答案是否如您所期望的那样有效。我得到了2014-04-09 00:00:00,这正是我所期望的。03-26现在给出了正确的答案(04-09),但“2014-03-25 00:00:00”给出了04-04,而04-08的预期时间是:
function addRollover($opentime , $tfString) {
switch($tfString) {
case "daily" :
$interval = 'P10D'; break;
case "4h":
$interval = 'PT40H'; break;
case "1h":
$interval = 'PT10H'; break;
case "30m":
$interval = 'PT5H'; break;
case "15m":
$interval = 'PT2H30M'; break;
default:
return '0000-00-00 00:00:00';
}
$interval = new DateInterval($interval);
$datetime = new DateTime($opentime);
$datetime->add($interval);
if (in_array($datetime->format('l'), array('Sunday','Saturday'))) {
$start = clone $datetime;
if ('Sunday' === $datetime->format('l')) {
$start->modify('previous Saturday');
}
$start->setTime(0, 0, 0);
$diff = $start->diff($datetime);
$datetime->modify('next Monday');
$datetime->add($diff);
if ('daily' === $tfString) {
$datetime->add(new DateInterval('P2D'));
}
}
else if ('daily' === $tfString) {
$datetime->add(new DateInterval('P4D'));
}
return $datetime->format('Y-m-d H:i:s');
}
echo addRollOver('2014-04-03 19:33:40', '4h'); // 2014-04-07 11:33:40