Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Lars-Janssen's avatar

Carbon get next date from string

Hi,

How do I get the next date for 18 January. When I try this:

Carbon::parse('18 january');

I get:

"2019-01-18T00:00:00.000000Z"

However I need:

"2020-01-18T00:00:00.000000Z"

Thanks!

0 likes
4 replies
Nakov's avatar

Hey @lars-janssen you can just add a year then:

Carbon::parse('18 january')->addYear();
1 like
Lars-Janssen's avatar

@nakov Thanks. However when it's still the current year it needs to be that years date.

[
        '17 january',
        '17 march',
        '17 may',
        '17 july',
        '17 september',
        '17 november'
]

I need the next following in dates. So for this year it would be:

2020-01-17
2020-03-17
2020-05-17
2020-07-17
2020-09-17
2019-11-17 <-- this should be 2019 (because it hasn't been 2019-11-17 yet)

Any idea ?

Nakov's avatar
Nakov
Best Answer
Level 73

@lars here you go:

$dates = collect([
            '17 january',
            '17 march',
            '17 may',
            '17 july',
            '17 september',
            '17 november'
        ])->map(function($item) {
            $date = Carbon::parse($item);

            return $date->isPast() ? $date->addYear() : $date;
        });
1 like

Please or to participate in this conversation.