我希望在字符串中添加一定的时间,但跳过工作日。因此,例如,如果我想在时间戳"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;
}
答案 0 :(得分:1)
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
你在这里看到的是什么:
我们首先需要增加as a string我们可以传递给DateInterval()
的时间。如果我们找不到,我们会返回默认时间。
我们创建了DateInterval()
对象。
我们创建代表我们的开始日期和时间的DateTime()
对象。
我们将时间间隔添加到日期时间。
如果生成的日期和时间是周末......
我们发现计算时间与周六午夜之间存在差异
然后我们快到周一早上午夜
然后我们添加了第6步
如果我们增加10天,我们将跨越两个周末,所以我们需要额外增加48小时
希望这对您有所帮助,并向您介绍PHP的DateTime功能。