试图格式化php时间12hr没有前导零


Trying to format php time 12hr no leading zeros

我觉得这样问很蠢,但我的时间格式有问题。使用php并从MySQL数据库中提取日期/时间,我试图格式化时间显示,因此在我的12小时格式中没有前导零字符。一个空间就好了……听起来很简单。可能是…

我想要的样式是:6:00 PM NOT 06:00 PM

$result[0][0]"2013-06-06 18:00:00"的值

PHP代码现在是:

echo strftime('%I:%M %p', strtotime($result[0][0]));
//upper case "i" WORKS but has leading zero

我认为我需要的PHP代码是:

echo strftime('%l:%M %p', strtotime($result[0][0]));
//Lower case "L" Provides no output

后者是因为根据php手册:使用%l(小写'L')生成12小时格式的Hour,在1到12的个位数前加空格

但是当我使用这种格式时,我什么也得不到!

我做错了什么简单的事情?

(嗯,有趣的是,上面的代码在StackOverflow屏幕上看起来完全一样,但我输入的是大写I和小写L…事实上,这里是上i ->"i",这里是下L ->"L"??)字体看起来一模一样??

DateTime 做诀窍:

<?php
header('Content-Type: text/plain');
$date = DateTime::createFromFormat('Y-m-d H:i:s', '2013-06-06 18:00:00');
echo $date->format('g:i A');
?>

同时,date()也在做:

<?php
header('Content-Type: text/plain');
echo date('g:i A', strtotime('2013-06-06 18:00:00'));
?>

都显示:

6:00 PM

strftime()看起来有bug。%l显示空字符串。我试着把setlocale(LC_TIME, "de_DE");放在顶部,但它没有帮助。

下面可能是一个原因(来自docs):

不是所有的转换说明符都可以被你的C库支持,在在这种情况下,它们将不被PHP的strftime()支持。此外,并非所有平台都支持负时间戳,因此日期范围可以限制为不早于Unix纪元。这表示%e, %T, %R和%D(可能还有其他),以及日期在1970年1月1日之前-将不能在Windows上工作,一些Linux发行版,以及其他一些操作系统。对于Windows系统,有关支持的转换说明符的完整概述,请参见»MSDN。

MSDN上没有%l格式代码。这可能是一个原因,杀死返回值。在这种情况下,strftime()是平台相关的。

根据您的代码,我也会尝试这样删除前导零:

PHP中的"g"将显示没有前导零的小时。

时间:<?= echo strftime("g:i:sa", strtotime($result['time'])); ?>

PHP datetime对象可以不带前导零的格式为

$DateTime->format('j');

嘿,你可以使用下面的函数从strftime

中去掉任何前导零
       function strip_zeros_from_date( $marked_string="") {
        //remove the marked zero's 
        $no_zeros = str_replace('*0', '', $marked_string);
        //Remove Reaming
        $cleaned_string = str_replace('*', '', $no_zeros);
        return $cleaned_string;
        }