20

我觉得问得很愚蠢——但我的时间格式有问题。使用 php 并从 MySQL 数据库中提取日期/时间我正在尝试格式化时间显示,因此我的 12 小时格式中没有前导零字符。一个空间很好..听起来很简单。大概是...

我想要的风格是:6:00 PMNOT06: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 -->“I”,这里是小写 L --> “l” ??) 它们在这种字体中看起来相同??

4

4 回答 4

43

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()是平台相关的。

于 2013-05-28T04:04:32.050 回答
4

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

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

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

于 2015-06-10T16:54:44.567 回答
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;

        }
于 2014-04-02T18:06:27.823 回答
1

PHP datetime 对象可以在没有前导零的情况下格式化为

$DateTime->format('j');
于 2016-08-03T00:03:27.893 回答