1

我需要用 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 库来做到这一点?

谢谢

PS:客户端的javascript解决方案也可以;)

4

2 回答 2

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,但我没用过。

于 2013-11-06T15:47:50.473 回答
0

PHP 在中文时间支持方面给出了不一致的结果。

对我有用的解决方案是输出时间 ISO 格式并使用jQuerymoment.js非常接近处理国际化时间的完美解决方案:

在 php 中将您的时间输出到<span>.

echo '<span date="'.date('c').'" moment-format="LT">'
    .date('h:n').'</span>';

wheredate('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'))
            );
        }
    });
于 2013-12-19T23:26:55.487 回答