Anonymous Vagrant
Anonymous Vagrant

Reputation: 121

DateTime::createFromFormat not working as intended?

I'm writing a php script to display as follows:

December 2020
2020-12-01
2020-12-31

January 2021
2021-01-01
2021-01-31

Febuary 2021
2021-02-01
2021-02-28

March 2021
2021-03-01
2021-03-31

Basically to display date from the very beginning and ends with the latest month. But i got an error upon executing.

Fatal error: Call to a member function format() on boolean

From my understanding, DateTime::createFromFormat is supposed to parse any string based on a given format to another format that can be found on date() But instead i got error and I tried old ways like using date("Y-m-01", strtotime($month)) but php outputs 1970-01-01 and 1970-01-31

My code:

$veryfirstmonth = "2020-12-01 18:01:15";
$veryfirstmonth = date('Y-m-d', strtotime($veryfirstmonth));
$today = date("Y-m-d");

$start = (new DateTime($veryfirstmonth))->modify('first day of this month');
$end = (new DateTime($today))->modify('first day of this month');
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($start, $interval, $end);

foreach ($period as $dt) {
    echo $month = $dt->format("F Y") . "<br>\n";
    //Convert $month into start of month and end of month again
//    echo $start = date("Y-m-01", strtotime($month));
//    echo $end = date("Y-m-t", strtotime($month));
    $start = DateTime::createFromFormat("F Y", $month)->format("Y-m-01");
    $end = DateTime::createFromFormat("F Y", $month)->format("Y-m-t");

    echo "Start: " . $start . "\n";
    echo "End: " . $end . "\n\n";
}

Upvotes: 0

Views: 126

Answers (1)

Abdlrahman Saber
Abdlrahman Saber

Reputation: 164

Your code worked with me just remove "<br>\n" replace that line

echo $month = $dt->format("F Y") . "<br>\n";

To

echo $month = $dt->format("F Y");
echo "\n";

Upvotes: 1

Related Questions