2017-05-05 1 views
2

Ich erstelle ein Scheduler-Skript, dass, wenn ich heute eine Aufgabe ausgeführt habe, meine nächste Aufgabe 6 Monate von heute (halbjährlich) ist, aber mein Problem ist, dass Menschen keine Aktivität haben Sonntags muss es also am Montag angepasst werden.Wie man Datum + 6 Monate hinzufügt, aber sonntags mit PHP ausschließt

Wie kann ich 6 Monate zum heutigen Datum hinzufügen, aber sonntags ausschließen, verwende ich PHP und in der Lage, 6 Monate unter Verwendung von Code bis jetzt hinzuzufügen.

Mein Code ist dies.

<?php echo date('Y-m-d', strtotime('+6 months'));?> 
+0

kann dies hilft http://stackoverflow.com/questions/2332681/add-number-of-days-to -a-date –

+2

echo getdate (strtotime ('+ 6 Monate')) ['wday'] == 0? Datum ('Y-m-d', strtotime ('+ 6 Monate 1 Tag')): Datum ('Y-m-d', strtotime ('+ 6 Monate')); Mach es einfach in einer Zeile. Ich gehe davon aus, dass Sie um einen Tag vorrücken wollen, wenn das, was Sie bekommen, wenn Sie 6 Monate hinzufügen, ein Sonntag ist. – blokeish

+0

@blokeish das war die einfachste, es hat funktioniert Danke! – KaoriYui

Antwort

0

Wie in der PHP.net date() documentation angegeben können Sie für einen bestimmten Tag Nummer überprüfen.

Also, mit, dieses Wissen können Sie entweder:

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"); 
    } 

oder etwas in den Zeilen von Bilal Ahmed Antwort mit einem Schalter

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; 
    } 

, was besser sein könnte, wenn es etwas ist zu tun Jeder andere Tag wie date() wird nicht jedes Mal ausgeführt, wenn Sie einen Fall ausführen. (Anmerkung: Ich habe nicht Geschwindigkeiten vergleichen)

EDIT: oneliner auf der Grundlage der Kommentar von Blokish auf die Fragesteller

Post
echo date("w", strtotime("+6 months")) == 0 ? date("Y-m-d", "+6 months +1 days") : date("Y-m-d", "+6 months"); 
0

Hier ist eine kleine Funktion. Übergeben Sie einfach ab und Enddatum

<?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'); 


     ?> 
0

komplette Antwort ist hier: -

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; 
+0

Könnte ich sein, aber ist das nicht ein bisschen viel zu archieve nur das Hinzufügen eines einzigen Tages, wenn die jetzt plus 6 Monate ein Sonntag sind? – Jelmergu

+0

@Jelmergu: Case bereits behandelt, bitte noch einmal überprüfen. –

Verwandte Themen