Jak zmienić datę w formacie PT # M # S przy użyciu JavaScript?Jak przekonwertować czas trwania interfejsu YouTube API (czas trwania ISO 8601 w formacie PT # M # S) do sekund
na przykład: PT5M33S
Chciałbym wyprowadzane jako hh:mm:ss
.
Jak zmienić datę w formacie PT # M # S przy użyciu JavaScript?Jak przekonwertować czas trwania interfejsu YouTube API (czas trwania ISO 8601 w formacie PT # M # S) do sekund
na przykład: PT5M33S
Chciałbym wyprowadzane jako hh:mm:ss
.
Oto podstawowy kod, aby uzyskać całkowitą liczbę sekund i innych części. Czuję się tym nieswojo, ponieważ reguła mówi, że za każdym razem, gdy chcesz logikować się w randkę, nie powinieneś tego robić :) Ale tak czy inaczej, tutaj to idzie - Google sprawiło, że nie było łatwo, zapewniając całkowite sekundy w API odtwarzacza getduration i zapewniając całkowicie inny format w gdacie api.
var reptms = /^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$/;
var hours = 0, minutes = 0, seconds = 0, totalseconds;
if (reptms.test(input)) {
var matches = reptms.exec(input);
if (matches[1]) hours = Number(matches[1]);
if (matches[2]) minutes = Number(matches[2]);
if (matches[3]) seconds = Number(matches[3]);
totalseconds = hours * 3600 + minutes * 60 + seconds;
}
dzięki, z odrobiną poprawek sprawiłem, że działał tak, jak potrzebowałem. – Nicholas
Co powiesz na 'duration:" PT26M "' –
Oto w jaki sposób można uzyskać dane wideo YouTube za pośrednictwem Youtube API (v3) w prosty sposób i czas konwersji wideo (ISO 8601) do sekundy. Nie zapomnij, aby zmienić swój identyfikator {WIDEO} i {} swój klucz atrybut URL do wideo id i swojej google klucza publicznego. Możesz utworzyć klucz publiczny uzyskując dostęp do konsoli programistów google.
$.ajax({
url: "https://www.googleapis.com/youtube/v3/videos?id={ YOUR VIDEO ID }&part=contentDetails&key={ YOUR KEY }",
dataType: "jsonp",
success: function (data) { youtubeCallback (data); }
});
function youtubeCallback(data) {
var duration = data.items[0].contentDetails.duration;
alert (convertISO8601ToSeconds (duration));
}
function convertISO8601ToSeconds(input) {
var reptms = /^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$/;
var hours = 0, minutes = 0, seconds = 0, totalseconds;
if (reptms.test(input)) {
var matches = reptms.exec(input);
if (matches[1]) hours = Number(matches[1]);
if (matches[2]) minutes = Number(matches[2]);
if (matches[3]) seconds = Number(matches[3]);
totalseconds = hours * 3600 + minutes * 60 + seconds;
}
return (totalseconds);
}
Co powiesz na 'duration:" PT26M "' –
Podczas gdy te odpowiedzi są poprawne technicznie; powinieneś sprawdzić momentjs, jeśli planujesz dużo czasu i czasu. Również sprawdzić moment-duration-formats co sprawia, że czas trwania formatowania tak proste jak regularne momentjs czasie
Przykładem, jak łatwo te 2 moduły uczynić ten
moment.duration('PT5M33S').format('hh:mm:ss')
że wyświetli 05:33. Istnieje wiele innych zastosowań.
Chociaż istnieje powód, dla którego youtube używa formatu ISO8601, ponieważ jest to standard, więc miej to na uwadze.
Fiddle: https://jsfiddle.net/Daugilas/kbeb0p99/1/ –
@Daugilas Kakaras Very nice! Ale musisz zaktualizować funkcję. Gdy format taki jak P1D - (jeden dzień) funkcja nie działa. –
@ Serhiog.Lazin, prawda - zaktualizowano: https://jsfiddle.net/kbeb0p99/4/ * po dość długim czasie :) –