我觉得这很愚蠢 - 但我的时间格式出了问题。使用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”??)它们在这个字体中看起来相同??
答案 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');