marty的date_format修改器无法正确处理utf-8编码的中文格式,检查源代码发现是函数strftime的问题,在windows下即便设置了setlocale,strftime函数也无法正确识别utf-8编码的格式字符串。
# -*- coding: utf-8 -*-
setlocale(LC_ALL, 'zh_CN.utf8');
echo strftime('\%Y年\%m月\%d日', time());
解决方法,smarty的plugins下添加一个date修改器,采用date函数处理日期格式。
require_once $smarty->_get_plugin_filepath('shared', 'make_timestamp');
function smarty_modifier_date($string, $format = 'Y-m-d H:i:s')
{
$timestamp = smarty_make_timestamp($string);
return date($format, $timestamp);
}