Как я могу манипулировать временем даты в формате PT # M # S с JavaScript?
например: PT5M33S
Я хотел бы выводить как hh:mm:ss
.
Как я могу манипулировать временем даты в формате PT # M # S с JavaScript?
например: PT5M33S
Я хотел бы выводить как hh:mm:ss
.
Вот базовый код, чтобы получить общее количество секунд и других частей. Я чувствую себя неловко, делая это, поскольку правило говорит, что в любое время, когда вы хотите, чтобы логика даты вы не должны были:) Но в любом случае, здесь все идет - Google сделал это нелегко, предоставляя общее количество секунд в API проигрывателя getduration и предоставляя совершенно разные формат в gdata 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;
}
Вот как вы можете получить видеоданные youtube через API Youtube (v3) простым способом и конвертировать продолжительность видео (ISO 8601) в секунды. Не забудьте изменить атрибут {YOUR VIDEO ID} и {YOUR KEY} в URL-адресе вашего идентификатора видео и общедоступный ключ google. Вы можете создать открытый ключ, доступ к консоли разработчика 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);
}
Хотя эти ответы технически правильны; вы должны проверить momentjs, если вы планируете много работать со временем и продолжительностью. Также проверьте момента-длительность-форматы, что делает длительность форматирования столь же простой, как и обычный момент timejs
Пример того, насколько легко эти 2 модуля делают это
moment.duration('PT5M33S').format('hh:mm:ss')
который выведет 05:33. И там много других применений.
Хотя есть причина, по которой youtube использует формат ISO8601, так как это стандарт, поэтому имейте это в виду.