尝试格式化 php 时间 12 小时无前导零

2022-08-30 18:57:13

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

我想要的风格是:不是6:00 PM06: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”)12小时格式的yeilds Hour,在单个数字1到12之前有一个空格%l

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

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

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


答案 1

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() 看起来很有问题。 显示空字符串。我试图放在顶部,但它没有帮助。%lsetlocale(LC_TIME, "de_DE");

以下可能是一个原因(来自文档):

并非所有转换说明符都受 C 库支持,在这种情况下,PHP 的 strftime() 将不支持它们。此外,并非所有平台都支持负时间戳,因此您的日期范围可能被限制为不早于Unix时代。这意味着%e,%T,%R和%D(可能还有其他)以及1970年1月1日之前的日期将无法在Windows,某些Linux发行版和其他一些操作系统上运行。对于 Windows 系统,可以在 » MSDN 中找到支持的转换说明符的完整概述。

MSDN 上没有格式代码。这可能是一个原因,杀死回报价值。在这种情况下,它依赖于平台。%lstrftime()


答案 2

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

PHP 中的“g”将显示不带前导零的小时。

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


推荐