我写了一个代码,使用preg_replace转换日期格式。这是以下代码:
$pattern=array(
"#Y#",//full year
"#y#",//short year
"#M#",//month short name
"#F#",//month full name
"#m#",//month number 0 lead
"#n#",//month number
"#t#",//days in month
"#l#",//full week day
"#D#",//short week day
"#d#",//day number of month
"#j#",//day number of month
"#a#",//AM/PM short view
"#A#",//AM/PM full view
);
$replace=array(
$d->ENnum2FA($converted[0]),//year 13xx
$d->ENnum2FA(substr($converted[0],2),true),//year xx lead zero
$d->shmonths[$converted[1]],//month name
$d->months[$converted[1]],//month name
$d->ENnum2FA($converted[1],true), //month number
$d->ENnum2FA($converted[1]), //month number
//$converted[1],
$d->j_days_in_month[$converted[1]],
$d->days[strtolower(gmdate("D",$stamp))],//week day {full view}
$d->ldays[strtolower(gmdate("D",$stamp))],//week day {short view}
$d->ENnum2FA($converted[2],true),//day of month
$d->ENnum2FA($converted[2],true),//day of month
$d->pmam[gmdate('a',$stamp)],
$d->pmam[gmdate('A',$stamp)],
);
// $format = "Y/m/d"; example
$date= preg_replace($pattern,$replace,$format);
它完美地更改了日期格式,但是问题在于它以时间 H:i:s 代替时间值输出了时间! 例如,输出为 1398/5/21,H:i:s ,而不是 1398/5/21,22:15:36 。 因此,我添加了以下代码:
$time_f = preg_replace_callback(
"#([His])#",
function ($matches) {
return(gmdate($matches[1],$stamp));
},
$date
);
它解决了问题。但是现在它显示的时间始终是:00:00:00 例如: 1398/5/21,00:00:00
我该如何解决问题?
答案 0 :(得分:0)
在preg_replace_callback()
函数中,您使用的是未定义的局部变量$stamp
。如果需要从外部范围继承此变量,则需要使用use()
选项。
$time_f = preg_replace_callback(
"#([His])#",
function ($matches) use ($stamp) {
return(gmdate($matches[1],$stamp));
},
$date
);