我需要用PHP显示中文格式的时间。
我已经尝试使用strftime:
setlocale(LC_TIME, "zh_CN");
echo strftime("%a, %Y %B %d");
这是日期和展示的工作:二,2013十一月05
但是时间:
setlocale(LC_TIME, "zh_CN");
echo strftime("%H %M");
显示:14 30
但下午2:30必须显示如下:下午2时30分为zh_CN和下午2时半为zh_HK
你有解决方案或php库吗?
THX
PS:客户端的javascript解决方案也可以;)
答案 0 :(得分:2)
我没有得到您想要的确切输出,但这通常是intl扩展名的好工作:
<?php
$locales = array(
'en_US',
'en_GB',
'zh_CN',
'zh_HK',
);
$date = new DateTime('14:30');
foreach($locales as $locale){
$fmt = new IntlDateFormatter($locale, IntlDateFormatter::NONE, IntlDateFormatter::SHORT);
echo $fmt->format($date) . PHP_EOL;
}
...打印:
2:30 PM
14:30
下午2:30
下午2:30
如果你坚持strftime,你必须使用%I
(“以12小时格式表示小时的两位数”)而不是%H
(“两位数表示” 24小时格式的小时“)和%p/%P
(”AM / PM“)。还有%X
(“基于区域设置的首选时间表示,没有日期”)。
如果你真的不需要支持多种语言,那么编写自己的日期格式化程序将是一个明智的选择。
至于JavaScript,我总是在这里看到Moment.js,但我还没有使用它。
答案 1 :(得分:0)
PHP在中文时间支持方面给出了不一致的结果。
对我有用的解决方案是输出时间ISO格式并使用jQuery和moment.js来接近处理国际化时间的完美解决方案:
在php输出您的时间到<span>
。
echo '<span date="'.date('c').'" moment-format="LT">'
.date('h:n').'</span>';
其中date('c')
返回ISO格式化日期,moment-format
定义moment.js用于替换ISO时间的格式
在Javascript中,您只需替换所有时间格式:
moment.lang('zh-cn'); // or zh-tw
$('span[moment-format]').each(function(index, element) {
if($(this).attr('date'))
{
$(this).html(
moment().format($(this).attr('moment-format'))
);
}
});