广州传奇网络
地址:广州市天河区东圃大马路富华楼C座
电话:13808825895
QQ:1564443073
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"}来显示时间即可。