2017-12-31 195 views
3

Ich möchte alle Freitagsdaten aus zwei Zeitintervallen bekommen. Mein Framework ist Laravel.Wie komme ich an Freitage zwischen zwei Zeitintervallen?

meine Funktion:

public function getFridaysInRange($dateFromString, $dateToString) 
{ 
    $dateFrom = new \DateTime($dateFromString); 
    $dateTo = new \DateTime($dateToString); 
    $dates = []; 

    if ($dateFrom > $dateTo) { 
     return $dates; 
    } 

    if (1 != $dateFrom->format('N')) { 
     $dateFrom->modify('next friday'); 
    } 

    while ($dateFrom <= $dateTo) { 
     $dates[] = $dateFrom->format('Y-m-d'); 
     $dateFrom->modify('+1 week'); 
    } 

    return $dates; 
} 

aber aus zwei Terminen gibt es:

"["2017-12-25","2018-01-01","2018-01-08","2018-01-15","2018-01-22","2018-01-29","2018-02-05","2018-02-12","2018-02-19","2018-02-26","2018-03-05","2018-03-12","2018-03-19","2018-03-26","2018-04-02","2018-04-09","2018-04-16","2018-04-23","2018-04-30","2018-05-07","2018-05-14","2018-05-21","2018-05-28","2018-06-04","2018-06-11","2018-06-18","2018-06-25","2018-07-02","2018-07-09","2018-07-16","2018-07-23","2018-07-30","2018-08-06","2018-08-13","2018-08-20","2018-08-27","2018-09-03","2018-09-10","2018-09-17","2018-09-24","2018-10-01","2018-10-08","2018-10-15","2018-10-22","2018-10-29","2018-11-05","2018-11-12","2018-11-19","2018-11-26","2018-12-03","2018-12-10","2018-12-17","2018-12-24","2018-12-31"]" 

wo mein Problem ist?

+0

Von dem, was 2 Tage, wurde das zurückgegeben? – gview

Antwort

2

Sie könnten Kohlenstoff verwenden:

$dateTo = Carbon::parse($dateToString); 
$friday = Carbon::parse($dateFromString . ' next friday'); 
$fridays = []; 

while($friday->lt($dateTo)) { 
    $fridays[] = $friday->toDateString(); 
    $friday->addWeek(); 
} 

return $fridays; 
1

Versuchen Sie, die folgende Funktion:

function getWeekDays($start, $end, $weekday) 
{ 
    $start = strtotime($start); 
    $end = strtotime($end); 

    $weekdays = array(); 

    while (date("w", $start) != $weekday) { 
     $start += 86400; 
    } 

    while ($start <= $end) 
    { 
     $weekdays[] = date('Y-m-d', $start); 
     $start += 604800; 
    } 

    return($weekdays); 
} 

Beispiel:

// get all fridays between 1st November 2017 and 1st December 2017 
print_r(getWeekDays('2017-11-01','2017-12-01', 5)); 

Ausgang:

Array 
(
    [0] => 2017-11-03 
    [1] => 2017-11-10 
    [2] => 2017-11-17 
    [3] => 2017-11-24 
    [4] => 2017-12-01 
) 

Besuchen Sie this link, um eine vollständige Demoversion des Skripts zu testen.

1

Es scheint, dass Sie nicht daran interessiert sind, was Ihr Problem war, aber Ihr ursprünglicher Code wurde leicht behoben:

<?php 

function getFridaysInRange($dateFromString, $dateToString) 
{ 
    $dateFrom = new \DateTime($dateFromString); 
    $dateTo = new \DateTime($dateToString); 
    $dates = []; 

    if (5 != $dateFrom->format('N')) { 
     $dateFrom->modify('next friday'); 
    } 

    if ($dateFrom > $dateTo) { 
     return $dates; 
    } 

    while ($dateFrom <= $dateTo) { 
     $dates[] = $dateFrom->format('Y-m-d'); 
     $dateFrom->modify('+1 week'); 
    } 

    return $dates; 
} 

var_dump(getFridaysInRange('2017-11-28', '2018-03-31')); 

Das Hauptproblem Ihre ständige Kontrolle am Tag der Woche ist, hätte sein sollen 5 (vorausgesetzt, Sie überprüfen für Freitag).

Ich habe auch Ihre Suche nach dateFrom> dateTo neu geordnet, da Sie das dateFrom nach dateTom ändern können, und das ist es, was Sie dort zu fangen versuchen.

Ausgang:

array(18) { 
    [0]=> 
    string(10) "2017-12-01" 
    [1]=> 
    string(10) "2017-12-08" 
    [2]=> 
    string(10) "2017-12-15" 
    [3]=> 
    string(10) "2017-12-22" 
    [4]=> 
    string(10) "2017-12-29" 
    [5]=> 
    string(10) "2018-01-05" 
    [6]=> 
    string(10) "2018-01-12" 
    [7]=> 
    string(10) "2018-01-19" 
    [8]=> 
    string(10) "2018-01-26" 
    [9]=> 
    string(10) "2018-02-02" 
    [10]=> 
    string(10) "2018-02-09" 
    [11]=> 
    string(10) "2018-02-16" 
    [12]=> 
    string(10) "2018-02-23" 
    [13]=> 
    string(10) "2018-03-02" 
    [14]=> 
    string(10) "2018-03-09" 
    [15]=> 
    string(10) "2018-03-16" 
    [16]=> 
    string(10) "2018-03-23" 
    [17]=> 
    string(10) "2018-03-30" 
} 
Verwandte Themen