在以下函数代码中将日期从一种格式转换为另一种格式有什么问题?


What's the issue in converting date from one format to another in following function code?

我尝试了以下代码将日期从mm-dd-yy格式转换为yyyy-mm-dd格式。

function format_date_yyyy_mm_dd($date_val){ 
      if(!empty($date_val)) {
        $newDate = date("m-d-Y", strtotime($date_val));
        return $newDate;        
      } else 
        return false;            
    }

假设,传递的参数($date_val)包含执行函数后的值4-26-1991,我得到的返回值为01-01-1970而不是所需的值1991-04-26。如何解决这个问题?有人能帮帮我吗?另外,如果你能给我提供一个功能来逆转上述日期转换的过程,那将对我非常有帮助。

使用DateTime类来处理这样的内容。既然已经有了给定的格式(n-j-Y),那么可以将其传递到createFromFormat()方法:

function format_date_yyyy_mm_dd($date_val) {
    $date = 'DateTime::createFromFormat('n-j-Y', $date_val);
    return $date->format('Y-m-d');
}

对于反向函数,普通构造函数就足够了,因为它能够读取标准的ISO8601格式(YYYY-MM-DD):

function format_date_mm_dd_yy($date_val) {
    $date = new 'DateTime($date_val);
    return $date->format('n-j-Y');
}

此函数使用DateTime::createFromFormat(),因为MM-DD-YY是模糊的,可能导致不正确的日期。

function format_date_yyyy_mm_dd($date_val){ 
    $date = DateTime::createFromFormat('n-j-y', $date_val);
    return $date->format('Y-m-d');
}

该函数将YYYY-MM-DD格式的日期返回到MM-DD-YY格式。由于YYYY-MM-DD是公认的日期格式,我们不需要DateTime::createFromFormat()来为我们解析日期:

function format_date_mm_dd_yy($date_val){ 
    $date = new DateTime($date_val);
    return $date->format('n-j-y');
}