【问题标题】:Trying to format php time 12hr no leading zeros试图格式化 php 时间 12hr 没有前导零
【发布时间】:2023-04-04 15:43:01
【问题描述】:

我觉得这个问题很愚蠢 - 但我的时间格式有问题。使用 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 小时格式的小时,在单个数字 1 到 12 之前有一个空格

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

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

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

【问题讨论】:

标签: php time string-formatting


【解决方案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() 不过看起来有问题。 %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() 是平台相关的。

【讨论】:

  • 同意可能是一个错误的问题 Re: strftime()。我将使用修剪选项,但很高兴了解这两个选项。他们也为我工作,因为我刚刚测试了每一个。再次感谢您。
  • 所以也许这表明了一种更好的格式化方法,例如 date () 函数,因为它似乎没有相同的记录平台和价值约束和问题?我开悟了。
  • 我更喜欢date()s 版本。更好,因为函数调用更少,并且更可靠,因为不依赖于平台。用它代替trim(strftime('%I:%M %p', strtotime($result[0][0])), '0')
  • 是的——在考虑了这两种方法之后,它确实看起来是一种更直接、更有效的方法。好电话,再一次。
  • 我正在使用这个回显日期('g:i:s',strtotime($total_time));但是如果小时数大于零,它会显示小时数 12,如果小时数大于零,则它显示正确。请帮帮我
【解决方案2】:

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

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

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

【讨论】:

  • 回显日期('g:i A, strtotime($result['time'])));是对的 - 为什么是 strftime
【解决方案3】:

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

        }

【讨论】:

    【解决方案4】:

    可以将 PHP 日期时间对象格式化为不带前导零的

    $DateTime->format('j');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-30
      • 2017-08-10
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      相关资源
      最近更新 更多