Попытка отформатировать 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"??) Они выглядят одинаково в этом шрифте??
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()
зависит от платформы.
Основываясь на вашем коде, я бы также попытался удалить начальный ноль:
Буква "g" в PHP будет отображать час без начального нуля.
Время: <?= echo strftime("g:i:sa", strtotime($result['time'])); ?>
Эй, вы можете использовать функцию ниже, чтобы удалить любые начальные нули из 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;
}
Объект PHP datetime может быть отформатирован без начальных нулей как
$DateTime->format('j');