我有一個開始日期,讓我們說這是$startDate = 2012-08-01;
根據開始日期和價值,我有一個存儲的INT值的變量,可以說這是$value = 10;
計算一下日期將使用PHP跳過週末
我會喜歡從startdate + 10天計算日期,並跳過週末。
使用上述值的結果將是2012-08-15
這將如何做呢?
我有一個開始日期,讓我們說這是$startDate = 2012-08-01;
根據開始日期和價值,我有一個存儲的INT值的變量,可以說這是$value = 10;
計算一下日期將使用PHP跳過週末
我會喜歡從startdate + 10天計算日期,並跳過週末。
使用上述值的結果將是2012-08-15
這將如何做呢?
這遠沒有效率,但是在可讀性的時候誰會關心這種權利呢? :)
<?php
function calculateNextDate($startDate, $days)
{
$dateTime = new DateTime($startDate);
while($days) {
$dateTime->add(new DateInterval('P1D'));
if ($dateTime->format('N') < 6) {
$days--;
}
}
return $dateTime->format('Y-m-d');
}
echo calculateNextDate('2012-08-01', 10); // return 2012-08-15
會發生什麼情況應該是很容易理解。首先,我們使用用戶提供的日期創建一個新的DateTime
對象。之後,我們將循環瀏覽我們想要添加到日期的日子。當我們在週末打了一天的時候,我們不會從我們想要添加到日期的日子中減去一天。
您可以使用PHP的的strtotime功能+ n天/小時等,
和除週末看看這裏: 32 hours ago excluding weekends with php
試試這個
<?php
function businessdays($begin, $end) {
$rbegin = is_string($begin) ? strtotime(strval($begin)) : $begin;
$rend = is_string($end) ? strtotime(strval($end)) : $end;
if ($rbegin < 0 || $rend < 0)
return 0;
$begin = workday($rbegin, TRUE);
$end = workday($rend, FALSE);
if ($end < $begin) {
$end = $begin;
$begin = $end;
}
$difftime = $end - $begin;
$diffdays = floor($difftime/(24 * 60 * 60)) + 1;
if ($diffdays < 7) {
$abegin = getdate($rbegin);
$aend = getdate($rend);
if ($diffdays == 1 && ($astart['wday'] == 0 || $astart['wday'] == 6) && ($aend['wday'] == 0 || $aend['wday'] == 6))
return 0;
$abegin = getdate($begin);
$aend = getdate($end);
$weekends = ($aend['wday'] < $abegin['wday']) ? 1 : 0;
} else
$weekends = floor($diffdays/7);
return $diffdays - ($weekends * 2);
}
function workday($date, $begindate = TRUE) {
$adate = getdate($date);
$day = 24 * 60 * 60;
if ($adate['wday'] == 0) // Sunday
$date += $begindate ? $day : -($day * 2);
return $date;
}
$def_date="";//define your date here
$addDay='5 days';//no of previous days
date_add($date, date_interval_create_from_date_string($addDay));
echo businessdays($date, $def_date); //date prior to another date
?>
從修改PHP.net
語法錯誤:http://codepad.viper-7.com/Oe8B3c – PeeHaa 2012-08-14 08:20:21
工作完美,謝謝!還有一個非常感謝的解釋 – David 2012-08-14 08:25:00
+1好的:)。 – pckabeer 2012-08-14 08:55:38