muncherelli
muncherelli

Reputation: 2903

Reformat Custom Date in PHP

So I know how to format a date in PHP, but not from a custom format. I have a date that is a string "YYMMDD" and I want to make it "MMDDYYYY'. strtotime doesn't seem like it would do a good job of this when the MM and DD are both low digits.

Upvotes: 1

Views: 913

Answers (5)

muncherelli
muncherelli

Reputation: 2903

Ended up doing:

$expiration_date_year   = substr($matches['expiration_date'],0,2);
$expiration_date_month  = substr($matches['expiration_date'],2,2);
$expiration_date_day    = substr($matches['expiration_date'],4,2);
$expiration_date = date('m/d/Y', mktime(0,0,0,$expiration_date_month, $expiration_date_day, $expiration_date_year));
        

Upvotes: -1

Anthony
Anthony

Reputation: 71

Maybe I am under-thinking this, but couldn't you just:


    $oldDate='040220'; // February 20th, 2004

    $year = substr($oldDate, 0,2);
    $year += $year < 50 ? 2000 : 1900;

    $date = preg_replace('/\d{2}(\d{2})(\d{2})/', '$1/$3/'.$year, $oldDate);

And you'd have the string you were looking for, or something close enough to it that you could modify from what I wrote here.

Upvotes: 1

mck66productions
mck66productions

Reputation: 11

Have many dates prior to 1910? If not, you could check your YY for <=10, and if true, prepend "20" else prepend "19"... Kinda similar approach to MM and DD check for <10 and prepend a "0" if true... (This is all after exploding, or substring... Assign each part to its own variable, i.e. $M=$MM; $D=$DD; $Y=$YYYY; then concatenate/arrange in whatever order you want... Just another potential way to skin the proverbial cat...

Upvotes: 0

deceze
deceze

Reputation: 522510

If you're running PHP >= 5.3, have a look at DateTime::createFromFormat. Otherwise, if you don't want to use pure string manipulation techniques, use the more primitive strptime together with mktime to parse the time into a UNIX timestamp, which you can then format using date.

Upvotes: 2

cdmckay
cdmckay

Reputation: 32290

Use str_split:

$date1 = "YYMMDD";
list($yy, $mm, $dd) = str_split($date1, 2);

// MMDDYYYY format, assuming they are all > 2000
$date2 = $mm . $dd . "20" . $yy;

Upvotes: 3

Related Questions