试图格式化PHP时间12小时没有前导零

时间:2013-05-28 03:42:02

标签: php time string-formatting

我觉得这很愚蠢 - 但我的时间格式出了问题。使用PHP并从MySQL数据库中提取日期/时间我正在尝试格式化时间显示,因此在我的12小时格式中没有前导零字符。空间很好..听起来很方便。可能是......

我想要的格式是:6:00 PM不是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小时格式的小时,前面有一个数字1到12的空格

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

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

(嗯,有趣的是上面的代码在StackOverflow屏幕上看起来完全相同,但我输入的是大写字母i和小写字母L ...实际上这里是上面的i - >“我”,这里是较低的L - >“l”??)它们在这个字体中看起来相同??

4 个答案:

答案 0 :(得分:27)

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()看起来很麻烦。 %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()与平台有关。

答案 1 :(得分:3)

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

&#34; g&#34;在PHP中,将显示没有前导零的小时。

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

答案 2 :(得分:1)

嘿,您可以使用下面的函数从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;

        }

答案 3 :(得分:1)

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

$DateTime->format('j');