How can I change more than a date format in a uniq

2019-07-23 12:34发布

I would like to understand how to change different date formats into a single format using a php function. After trying in every way, i wasn't able to solve this puzzle. I always just used the following code in my custom function.php smoothly:

/* Change date format for coupon */
function change_date_format($x) {
    $date = DateTime::createFromFormat('j-M-Y', $x);
    $x = $date->format('Y-m-d');
    return $x;
}

In this way i can convert the format 'j-M-Y' in the format 'Y-m-d'. The problem is that now i need to convert not only the date format 'j-M-Y', but also other formats (for example, i've to convert date format 'j-M-Y' and date format 'Y-m-d\TH:i:sP' in date format 'Y-m-d'. I tried to combine different logic functions but system gives me error.

Thanks to all of you who try to help me...

3条回答
Viruses.
2楼-- · 2019-07-23 13:27

You can use an additional parameter as follows:

/*Change date format for coupon*/
function change_date_format($x, $dateFormat) {
    $date = DateTime::createFromFormat($dateFormat, $x);
    $x = $date->format('Y-m-d');
    return $x;
}
查看更多
狗以群分
3楼-- · 2019-07-23 13:32

Add an input parameter to your function called: $inputFormat and use this instead 'j-M-Y', so you should specify always the input format. You can specify a default format for input.

/**
 * Return with a normal format of any date by given format
 * Default format is j-M-Y if no input format given
 * 
 * @param string $dateString
 * @param string $inputFormat
 * @return string
 */
function change_date_format($dateString, $inputFormat = 'j-M-Y') {
    $date = DateTime::createFromFormat($inputFormat, $dateString);
    return $date->format('Y-m-d');
}
echo change_date_format('23-05-2016', 'd-m-Y');
echo change_date_format('05/23/2016', 'm/d/Y');
查看更多
Explosion°爆炸
4楼-- · 2019-07-23 13:34

The DateTime class is pretty good at parsing different formats without createFromFormat(). If the formats you have are supported (Supported Date and Time Formats) then just let it create based on the in-built logic. If $x = '2016-06-30T23:59:59+02:00' then the DateTime class handles this just fine:

function change_date_format($x) {
    $date = new DateTime($x);
    return $date->format('Y-m-d');
}
查看更多
登录 后发表回答