广州传奇网络

地址:广州市天河区东圃大马路富华楼C座

电话:13808825895

邮箱:gz020wbs@163.com

QQ:1564443073

网址:http://www.020wbs.com/

首页 > 二次开发Ecshop二次开发 > ECSHOP二次开发增加时间格式化功能使模板直接调用date_format来格式化时间

二次开发Ecshop二次开发

二次开发Ecshop二次开发

ECSHOP二次开发增加时间格式化功能使模板直接调用date_format来格式化时间

 ECSHOP系统采用时间戳记录时间,如何在模板调用时间的时候直接调用时间戳来格式化显示出来而不用在程序里面先格式化再赋值给模板呢?下面给出一个解决方法。

找到cls_template.php大概639行位置增加如下代码

case 'date_format':

    if ($p != '') {

        $timestamp = $this->smarty_make_timestamp($p);

    }

    $_win_from = array('%D',       '%h', '%n', '%r',          '%R',    '%t', '%T');

    $_win_to   = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');

    if (strpos($s[1], '%e') !== false) {

        $_win_from[] = '%e';

        $_win_to[]   = sprintf('%\' 2d', date('j', $s[1]));

    }

    if (strpos($s[1], '%l') !== false) {

        $_win_from[] = '%l';

        $_win_to[]   = sprintf('%\' 2d', date('h', $timestamp));

    }

    $s[1] = str_replace($_win_from, $_win_to, $s[1]);

    $p = strftime($s[1], $timestamp);

break;

接着增加以下函数

function smarty_make_timestamp($string) {

if(empty($string)) {

$time = time();

} elseif (preg_match('/^\d{14}$/', $string)) {    

$time = mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2),

substr($string, 4, 2),substr($string, 6, 2),substr($string, 0, 4));

} elseif (is_numeric($string)) {

$time = (int)$string;

} else {

$time = strtotime($string);

if ($time == -1 || $time === false) {

$time = time();

}

}

return $time;

}

接着在模板调用的时候 比如 {$order.add_time|date_format:"%Y-%m-%d"}来显示时间即可。