我觉得这样问很蠢,但我的时间格式有问题。使用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;
}