doulanli6146 2019-08-12 14:39
浏览 129
已采纳

在preg_replace输出中不计算时间

I wrote a code that converts the date format using preg_replace. It's the following code:

$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);

It changes the date format perfectly ,but the problem is that it outputs the time as H:i:s instead of the time value! For example the output is 1398/5/21, H:i:s instead of 1398/5/21, 22:15:36. So, I added the following code:

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

It solved the problem. But Now it shows the time always as: 00:00:00 For example: 1398/5/21, 00:00:00

How can I solve the problem?

  • 写回答

1条回答

  • dongwu9972 2019-08-12 14:50
    关注

    In your preg_replace_callback() function you're using the undefined local variable $stamp. If you need to inherit this variable from the outer scope, you need to use the use() option.

    $time_f = preg_replace_callback(
        "#([His])#",
        function ($matches) use ($stamp) {
            return(gmdate($matches[1],$stamp));
        },
        $date
    );
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#网络安全#的问题:求ensp的网络安全,不要步骤要完成版文件
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥20 使用Photon PUN2解决游戏得分同步的问题
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM