buckdanny
buckdanny

Reputation: 357

PHP, Date: A Dot appended to a month short representation

I have

date("M.", $datetime)

I want to get this output:
Jan.
Feb.
Mar.
Apr.
May (no dot necessary)
Jun.
Jul.

I dont like the idea of an if-statement to check the length/number of month every time a date is generated.

Is there a approach that is more simple? Like changing the month-name in general? Or hooking into the date function itself to implement an if-statement that runs every time the date function runs.

Thanks

Upvotes: 0

Views: 749

Answers (2)

RiggsFolly
RiggsFolly

Reputation: 94642

This seems to be a bit of a hammer to crack a nut, or to avoid an IF statement in this case, but you can create an array with your month names in it and use that to output different month names if you like

$m_arr = [0,'Jan.','Feb.','Mar.','Apr.','May','Jun.',
            'Jul.', 'Aug.', 'Sep.','Oct.','Nov.','Dec.'];

$m = (int)date('n', $datetime);

echo $m_arr[$m];

Upvotes: 1

Qirel
Qirel

Reputation: 26450

If you don't want the dot to appear after May month, you will need a check of some sort - which normally is an if. You could do something like this, check if the month returned by date() isn't May, and add a dot after if it isn't.

$date = date("M", $datetime);
if (date("M") != "May")
    $date .= ".";

Otherwise you'd need to implement a function of your own, but in the end - you will have to end up with this again, there's really no way around it - and this is by far the simplest and cleanest way.

You could wrap this into a function. You can't alter the date() function directly, but you can create one of your own.

function my_date($format, int $timestamp = null) {
    if ($timestamp === null)
        $timestamp = time();

    $date = date($format, $timestamp);
    if ($format == "M" && date("M", $timestamp) != "May")
        $date .= ".";
    return $date;
}

Then use it as

echo my_date("M", $datetime);

Upvotes: 1

Related Questions