我正在創建一個調度程序腳本,如果我今天執行任務,我的下一個任務將從今天開始6個月(半年度),但我的問題是人們沒有任何活動因此週日必須在星期一進行調整。如何添加日期+ 6個月,但使用PHP排除星期日
如何添加6個月到今天的日期,但不包括週日,我正在使用PHP並能夠使用以下代碼添加6個月至今。
我的代碼是這樣的。
<?php echo date('Y-m-d', strtotime('+6 months'));?>
我正在創建一個調度程序腳本,如果我今天執行任務,我的下一個任務將從今天開始6個月(半年度),但我的問題是人們沒有任何活動因此週日必須在星期一進行調整。如何添加日期+ 6個月,但使用PHP排除星期日
如何添加6個月到今天的日期,但不包括週日,我正在使用PHP並能夠使用以下代碼添加6個月至今。
我的代碼是這樣的。
<?php echo date('Y-m-d', strtotime('+6 months'));?>
如PHP.net date() documentation中所述,您可以檢查具體的日期編號。
因此,使用這些知識,您可以:
if (date("w", strtotime("+6 months")) == 0) {
echo date("Y-m-d", strtotime("+6 months +1 days"));
}
else {
echo date("Y-m-d", "+6 months");
}
或東西在比拉爾·艾哈邁德的答案的線路使用開關
switch (date("w", strtotime("+6 months")) == 0) {
case 0: // Sunday
echo date("Y-m-d", strtotime("+6 months +1 days"));
break;
case 1: // Monday
case 2: // Tuesday
case 3: // Wednesday
case 4: // Thursday
case 5: // Friday
case 6: // Saturday
echo date("Y-m-d", "+6 months");
break;
}
如果有適合做可能會更好每次不同的日子,date()
將不會執行每次你執行的情況下。 (注:我沒有比較的速度)
編輯:oneliner基礎上,blokish對提問者發佈
echo date("w", strtotime("+6 months")) == 0 ? date("Y-m-d", "+6 months +1 days") : date("Y-m-d", "+6 months");
這裏的答案註釋:https://stackoverflow.com/a/12365635/6557808 提供超過你問倒明確。
這是一個小功能。從日期和結束日期只是通過
<?php
function number_of_working_days($from, $to) {
$workingDays = [1, 2, 3, 4, 5, 6]; # date format = N (1 = Monday, ...)
$from = new DateTime($from);
$to = new DateTime($to);
$to->modify('+1 day');
$interval = new DateInterval('P1D');
$periods = new DatePeriod($from, $interval, $to);
$days = 0;
foreach ($periods as $period) {
if (!in_array($period->format('N'), $workingDays)) continue;
$days++;
}
return $days;
}
echo number_of_working_days('2017-05-06', '2017-05-08');
?>
完整的答案就在這裏: -
function daysToAdd($startDate,$endDate)
{
$count=0;
While($startDate!=$endDate){
$lpcnt=0;
$begin = new DateTime($startDate);
$end = new DateTime($endDate);
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin, $interval, $end);
foreach ($period as $dt){
if($dt->format("l")=='Sunday'){
$count++;
$lpcnt++;
}
}
$day = date('D', strtotime($endDate));
if($day=='Sun'){
$count=$count+1;
$lpcnt=$lpcnt+1;
}
$startDate=date('Y-m-d', strtotime($endDate . ' +1 day'));
$endDate=date('Y-m-d', strtotime($endDate . ' +'.$lpcnt.' day'));
if($startDate!=$endDate){
daysToAdd($startDate,$endDate);
}else{
if(date('D', strtotime($startDate))=='Sun') {
$count=$count+1;
break;
}
}
}
return $count;
}
$currentDate=date('Y-m-d');
$postSixMonth=date('Y-m-d', strtotime("+5 months"));
$daysToadd=daysToAdd($currentDate,$postSixMonth);
$requiredDate=date('Y-m-d', strtotime($postSixMonth . ' +'.$daysToadd.' days'));
echo $requiredDate;exit;
可能是我,但這不是一點點實踐只是增加了一天,現在的加6個月是星期天? – Jelmergu
@Jelmergu:案件已經處理完畢,請再次檢查一次。 –
這或許有助於http://stackoverflow.com/questions/2332681/add-number-of-days-to -a-date –
echo getdate(strtotime('+ 6 months'))['wday'] == 0?日期('Y-m-d',strtotime('+ 6個月1天')):日期('Y-m-d',strtotime('+ 6個月'));只需一行。如果你增加6個月的時間是星期日,我想你會想要提前一天。 – blokeish
@blokeish這是最簡單的,它工作謝謝! – KaoriYui