如何使用PHP格式化中文的小时和分钟

时间:2013-11-05 21:17:57

标签: javascript php time localization

我需要用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解决方案也可以;)

2 个答案:

答案 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格式并使用jQuerymoment.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'))
            );
        }
    });