Подтвердить что ты не робот

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

Я чувствую глупость, но у меня была проблема с моим временным форматом. Используя php и вытаскивая дату/время из MySQL db, я пытаюсь отформатировать дисплей времени, чтобы в моем 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" ) yeilds Hour в 12-часовом формате с пробелом, предшествующим отдельным цифрам от 1 до 12

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

ЧТО ПРОСТОТА Я делаю неправильно?

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

4b9b3361

Ответ 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 (и, возможно, другие), а также даты до 1 января 1970 года - не будет работать в Windows, некоторые Linux распределений и нескольких других операционных систем. Для систем Windows, полный обзор поддерживаемых спецификаторов конверсии можно найти в "MSDN.

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

Ответ 2

Эй, вы можете использовать функцию ниже, чтобы вырезать любые ведущие нули из strftime

       function strip_zeros_from_date( $marked_string="") {
        //remove the marked zero 
        $no_zeros = str_replace('*0', '', $marked_string);
        //Remove Reaming
        $cleaned_string = str_replace('*', '', $no_zeros);
        return $cleaned_string;

        }

Ответ 3

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

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

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

Ответ 4

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

$DateTime->format('j');