我尝试了以下代码将日期从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');
}