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

How to format hour and minute in Chinese with PHP

本文关键字:小时 分钟 中文 格式化 何用 PHP      更新时间:2023-09-26

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

我没有得到您想要的确切输出,但这通常对于 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在这里推荐,但我没有使用过它。

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

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

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

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

其中date('c')返回 ISO 格式的日期,moment-format定义格式时刻.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'))
            );
        }
    });