Convertir youtube Api v3 durée de la vidéo en php
comment puis-je convertir des PT2H34M25S à 2:34:25
J'ai recherché et utilisé ce code. Je suis nouveau sur regex quelqu'un peut-il expliquer cela ? et m'aider avec mon problème
function covtime($youtube_time){
preg_match_all('/(\d+)/',$youtube_time,$parts);
$hours = floor($parts[0][0]/60);
$minutes = $parts[0][0]%60;
$seconds = $parts[0][1];
if($hours != 0)
return $hours.':'.$minutes.':'.$seconds;
else
return $minutes.':'.$seconds;
}
mais ce code ne me donne que HH:MM
idiots, a trouvé la solution :
function covtime($youtube_time){
preg_match_all('/(\d+)/',$youtube_time,$parts);
$hours = $parts[0][0];
$minutes = $parts[0][1];
$seconds = $parts[0][2];
if($seconds != 0)
return $hours.':'.$minutes.':'.$seconds;
else
return $hours.':'.$minutes;
}
- Êtes-vous sûr que ce n'est pas de vous donner de MM:SS (le deuxième cas dans votre conditionnelle)? Je ne vois pas un chemin de code qui pourrait de sortie HH:MM.
- il me donne MM:SS, mais pas HH:MM:SS
- Et êtes-vous sûr essayé avec une vidéo de plus d'une heure de temps? Aussi, le format d'entrée de l'exemple que vous donnez dans votre question clairement a 3 chiffres séquences, alors pourquoi est-ce que votre code de considérer seulement les 2 premiers?
- viens de trouver la solution ont posté ci-dessus merci pour votre aide
- J'ai édité ma réponse avec une nouvelle fonction pour vous de regarder. Il y a encore plus de validation qui peut être fait. Aussi il ressemble à quelqu'un a supprimé la modification que vous mettez dans votre question.
- solution échoue sur les vidéos que le rapport d'une durée de 1:00:01. voir ma réponse: stackoverflow.com/a/35836604
Vous devez vous connecter pour publier un commentaire.
Vous devriez jeter un oeil à votre
$parts
variable après sa création.Comparer cette sortie avec la façon dont vous définissez vos variables. Il devrait se démarquer assez évidemment après.
Je suppose que ma question suivante, après c'est ce que les variations de l'entrée de chaîne de temps êtes-vous en attend et de validation va vous être en train de faire? Les variations du format d'entrée que vous souhaitez gérer auront une incidence sur la complexité du code écrit.
Edit:
Voici une mise à jour de fonction pour gérer manque des valeurs numériques (si les heures ou les minutes est omis) et des secondes/heures de plus de 60 ans (pas sûr si cela n'arrivera jamais). Ce n'est pas de valider l'étiquette pour les numéros:
Plus de validation peuvent être ajoutés à regarder dans la validation de la chaîne d'entrée.
À l'aide de classe DateTime
Vous pouvez utiliser PHP de la classe DateTime pour atteindre cet objectif. Cette solution est beaucoup plus simple, et fonctionne même si le format de la quantité dans la chaîne sont dans un ordre différent. Une regex solution (la plus probable) de briser dans de tels cas.
En PHP,
PT2H34M25S
est une date valide de la période de chaîne, et est entendu par la date de l'analyseur. Nous faisons ensuite appel de ce fait, et il suffit de l'ajouter à l'époque Unix à l'aide deadd()
méthode. Ensuite, vous pouvez mettre en forme la date obtenue pour obtenir les résultats requis:Démo
var_dump($youtube_time);
l'intérieur de la fonction, et de me dire ce que c'sorties lorsque vous essayez avec votre chaîne de temps?return $start->format('g:i:s'); //for hours:minutes:seconds
return $start->format('H:i:s');
au lieu deg
mettre un capitalH
cela va convertir le temps parfaitement, même si u ne laisser passer que quelques minutes ou quelques secondesH:i:s
pourrait fonctionner, maisg:i:s
ne sera pas?<?php /** * Return the youtube video duration * @param $youtube_time * @return time */ function covtime($youtube_time){ $start = new DateTime('@0'); // Unix epoch $start->add(new DateInterval($youtube_time)); return $start->format('H:i:s'); } echo covtime('PT34M25S');
comme vous pouvez le voir pas d'heures passéesLes deux Amal's et Pferate's solutions sont grands!
Cependant, Amal solution me donner 1h supplémentaire. Ci-dessous est ma solution qui est la même avec Amal mais à l'approche de la différence et de ce travail pour moi.
datetime->add()
de référenceVoici ma solution qui gère manquant H, M ou S (tester une vidéo avec une longueur de 1:00:01 et vous verrez le problème avec d'autres réponses). Secondes seuls sont présentés comme 0:01, mais si vous voulez changer cela il suffit de changer le dernier d'autre à
elseif($M>0)
et en ajouter une autre pour les secondes par exempleelse { return ":$S" }
contentDetails.duration = P1DT3H8S
à partir de la les données de l'api docs: "Si la vidéo est au moins une journée, les lettres P et T sont séparés, et la valeur du format P#DT#H#M#S." donc, voici une modification:$yt = str_replace('P', '', $yt);
$yt = str_replace('T', '', $yt);
solution sympa sinon! edit: de plus, la manipulation de laD
cas est nécessaire, mais trivial à mettre en œuvre avec la configuration actuelle de la fonction.C'est ma solution, test terminé!
essayer cela vous donnera la durée en secondes
J'utilise deux classes, 1 pour appeler des API YouTube, et de convertir le temps. ici, il est simplifié.
Comme vous pouvez le voir, YouTubeGet est une classe statique, mais il n'a pas à être. YouTubeDateInterval cependant à être une instance en raison de la façon dont DateInterval œuvres (qui est en cours d'extension).
utilisation est soit sur le passage d'un iso 8601 date de YouTubeDateInterval.
ou en passant le YouTubeGet l'api et de la vidéo id de clé
Voici le code complet pour obtenir, de convertir et afficher la durée de la vidéo
Remplacer xxxxxxx avec votre Clé API
Résultats: 13:07
Essayer la fonction suivante:
Vous pouvez essayer ce -
HTML:
DateTime et DateInterval pas de travail dans Yii ou certaines version de php.
Donc, c'est ma solution. Son travail avec moi.
Pourquoi la complication. Pensez à l'extérieur de la boîte.
OK. preg_replace n'est pas vraiment nécessaire, mais je l'ai mis à la garantie uniquement des chiffres.
Puis pour ma mise en forme (que vous pouvez faire comme bon vous semble sans limites),