在preg_replace输出中

时间:2019-08-12 14:39:07

标签: php date time preg-replace preg-replace-callback

我写了一个代码,使用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

我该如何解决问题?

1 个答案:

答案 0 :(得分:0)

preg_replace_callback()函数中,您使用的是未定义的局部变量$stamp。如果需要从外部范围继承此变量,则需要使用use()选项。

$time_f = preg_replace_callback(
    "#([His])#",
    function ($matches) use ($stamp) {
        return(gmdate($matches[1],$stamp));
    },
    $date
);