22 votes

Essayer de formater l'heure de php en 12 heures sans zéros en tête

Je me sens stupide de demander cela, mais j'ai eu un problème avec mon format d'heure. En utilisant php et en extrayant la date et l'heure d'une base de données MySQL, j'essaie de formater l'affichage de l'heure de façon à ce qu'il n'y ait pas de caractères zéro dans le format 12 heures. Un espace est très bien... Cela semble facile. C'est probablement le cas...

Le style que je veux est : 6:00 PM PAS 06:00 PM

$result[0][0] est la valeur de "2013-06-06 18:00:00"

Le code PHP est maintenant :

echo strftime('%I:%M %p', strtotime($result[0][0]));
//upper case "i" WORKS but has leading zero

Le code PHP dont je pense avoir besoin est :

echo strftime('%l:%M %p', strtotime($result[0][0]));
//Lower case "L" Provides no output

Ce dernier est parce que selon le manuel php : utiliser %l (L minuscule) yeilds Heure au format 12 heures, avec un espace précédant les chiffres simples de 1 à 12

Mais lorsque j'utilise ce format, je n'obtiens rien !

Quelle est la chose SIMPLE que je fais mal ?

(Hmmm , c'est amusant de voir que les codes ci-dessus sont exactement les mêmes sur l'écran de StackOverflow mais que je tape un i majuscule et un L minuscule... en fait voici le i majuscule --> "I", et voici le L minuscule --> "l" ? ?) Ils semblent identiques dans cette police ? ??

44voto

HAL9000 Points 7841

DateTime qui fait l'affaire :

<?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');
?>

Aussi, date() le faire :

<?php
header('Content-Type: text/plain');

echo date('g:i A', strtotime('2013-06-06 18:00:00'));
?>

Les deux montrent :

6:00 PM

strftime() Mais ça a l'air de boguer. %l montre une chaîne vide. J'ai essayé de mettre setlocale(LC_TIME, "de_DE"); en haut, mais cela ne sert à rien.

La raison suivante pourrait être une raison (de docs ) :

Tous les spécificateurs de conversion ne sont pas forcément pris en charge par votre bibliothèque C, en dans ce cas, ils ne seront pas supportés par la fonction strftime() de PHP. De plus, toutes les plates-formes ne supportent pas les horodatages négatifs. peut être limitée à une date antérieure à celle de l'époque Unix. Ce Cela signifie que %e, %T, %R et, %D (et peut-être d'autres), ainsi que les dates antérieures au 1er janvier 1970 - ne fonctionneront pas sous Windows, certaines distributions Linux, et quelques autres systèmes d'exploitation. Pour les systèmes Windows, un aperçu complet des spécificateurs de conversion pris en charge est disponible à l'adresse suivante " MSDN .

Sur MSDN il n'y a pas %l code de format. Il peut y avoir une raison, qui tue la valeur de retour. Dans ce cas strftime() dépend de la plate-forme.

4voto

jburnett Points 41

Sur la base de votre code, j'essaierais également ceci pour supprimer le zéro de tête :

Le "g" de PHP affiche l'heure sans le zéro initial.

C'est l'heure : <?= echo strftime("g:i:sa", strtotime($result['time'])); ?>

1voto

Eldan Shkolnikov Points 421

Vous pouvez utiliser la fonction ci-dessous pour supprimer les zéros non significatifs de 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;

        }

1voto

Pratikshya Points 157

Un objet PHP de type datetime peut être formaté sans zéros en tête comme suit

$DateTime->format('j');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X