Попытка отформатировать php время 12 часов без начальных нулей


Я чувствую себя глупо, спрашивая - но у меня была проблема с моим форматом времени. Используя 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

Но когда я использую этот формат, я ничего не получаю!

Какую ПРОСТУЮ вещь я делаю неправильно?

(Хм, забавно, как приведенные выше коды выглядят совершенно одинаково на экране стекового потока, но я набираю верхний регистр i и нижний регистр L... на самом деле здесь верхний i ->"I", а здесь нижний L ->"l"??) Они выглядят одинаково в этом шрифте??

Author: BlitZ, 2013-05-28

4 answers

Дата и время делаем трюк:

<?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"); вверху, но это не помогает.

Причиной может быть следующее (из документы):

Не все спецификаторы преобразования могут поддерживаться вашей библиотекой C, в которой в случае, если они не будут поддерживаться strftime() PHP. Кроме того, не все платформы поддерживают отрицательные временные метки, поэтому диапазон дат может быть ограничен не ранее эпохи Unix. Это означает, что %e, %T, %R и, %D (и, возможно, другие) - а также даты до 1 января 1970 года - не будет работать на Windows, некоторые Linux дистрибутивы и несколько других операционных систем. Для систем Windows полный обзор поддерживаемых спецификаторов преобразования можно найти по адресу " MSDN-ДОМЕН.

В MSDN нет кода формата %l. Это может быть причиной того, что убивающее возвращаемое значение. В этом случае strftime() зависит от платформы.

 23
Author: BlitZ, 2013-05-28 05:02:45

Основываясь на вашем коде, я бы также попытался удалить начальный ноль:

Буква "g" в PHP будет отображать час без начального нуля.

Время: <?= echo strftime("g:i:sa", strtotime($result['time'])); ?>

 2
Author: jburnett, 2015-06-10 16:54:44

Эй, вы можете использовать функцию ниже, чтобы удалить любые начальные нули из 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;

        }
 1
Author: Eldan Shkolnikov, 2014-04-02 18:06:27

Объект PHP datetime может быть отформатирован без начальных нулей как

$DateTime->format('j');
 1
Author: Pratikshya, 2016-08-03 00:03:27