PHP Mittels Carbon Zeiträume berechnen

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Moin zusammen,

ich bastle gerade eine kleine PHP-Funktion, die mittels Carbon in einer Schleife Zeiträume berechnet:

PHP:
public function forecast()
{
    $date = Carbon::parse('2020-07-01');
    $dateToday = Carbon::now();

    $initDateStr = Carbon::parse('2020-07-01')->toDateString();
    $transactionsFirstDay = Carbon::parse($initDateStr)->startOfMonth();
    $transactionsLastDay = Carbon::parse($initDateStr)->endOfMonth();

    // TODO -> Schleife, von Start bis Ende/Vormonat
    while ($date < $dateToday) {

        echo "First Date: " . $transactionsFirstDay . "<br>";
        echo "Last Date: " . $transactionsLastDay . "<br>";
        echo "Date: " . $date . "<br>";
        echo "<br><hr><br>";

        $transactionsFirstDay->addMonth();
        $transactionsLastDay->addMonth();
        $date->addMonth();
    }
}

Das Ergebnis sieht folgendermaßen aus:

First Date: 2020-07-01 00:00:00
Last Date: 2020-07-31 23:59:59
Date: 2020-07-01 00:00:00



First Date: 2020-08-01 00:00:00
Last Date: 2020-08-31 23:59:59
Date: 2020-08-01 00:00:00



First Date: 2020-09-01 00:00:00
Last Date: 2020-10-01 23:59:59
Date: 2020-09-01 00:00:00



First Date: 2020-10-01 00:00:00
Last Date: 2020-11-01 23:59:59
Date: 2020-10-01 00:00:00



First Date: 2020-11-01 00:00:00
Last Date: 2020-12-01 23:59:59
Date: 2020-11-01 00:00:00



First Date: 2020-12-01 00:00:00
Last Date: 2021-01-01 23:59:59
Date: 2020-12-01 00:00:00



First Date: 2021-01-01 00:00:00
Last Date: 2021-02-01 23:59:59
Date: 2021-01-01 00:00:00



First Date: 2021-02-01 00:00:00
Last Date: 2021-03-01 23:59:59
Date: 2021-02-01 00:00:00



First Date: 2021-03-01 00:00:00
Last Date: 2021-04-01 23:59:59
Date: 2021-03-01 00:00:00

Die ersten beiden Bereiche werden korrekt berechnet -
jeweils der erste und letzte Tag des Monats - dann + 1 Monat.

Ab dem dritten Abschnitt wird aber jeweils an Stelle des letzten
Monatstages der erste Tag des daraufliegenden Monats an-
gezeigt.

Habe ich heir einen Fehler eingebunden?

VG,
 
addMonthsNoOverflow(1) sollte klappen.
 
Wieso? Wieso inkrementierst du nicht einfach $date und wählst davon startOfMonth() und endOfMonth()? Wieso inkrementierst du drei Variablen unabhängig voneinander? Ist doch vorprogrammiert, dass da irgendwann was drifted/overflowed.

PHP:
$date = Carbon::parse('2020-07-01');
$dateToday = Carbon::now();

$initDateStr = Carbon::parse('2020-07-01')->toDateString();

// TODO -> Schleife, von Start bis Ende/Vormonat
while ($date < $dateToday) {

    $transactionsFirstDay = $date->startOfMonth();
    $transactionsLastDay = $date->endOfMonth();

    echo "First Date: " . $transactionsFirstDay . "\n";
    echo "Last Date: " . $transactionsLastDay . "\n";
    echo "Date: " . $date . "\n";
    echo "\n\n";

    $date->addMonth();
}
 
  • Gefällt mir
Reaktionen: razzy
Zurück
Oben