Shayan Arif
Shayan Arif

Reputation: 69

Convert youtube api returned time format to seconds using PHP

So the received duration/time format from api is this ;

PT1H1M6S

how can i convert this into seconds using any php function?

Upvotes: 6

Views: 2555

Answers (3)

Muhammad Salman Zaib
Muhammad Salman Zaib

Reputation: 568

PHP Function to convert ISO8601 Duration To Seconds.

<?php

function convertISO8601DurationToSeconds($iso8601DurationStr)
{
   $interval = new \DateInterval($iso8601DurationStr);
   $seconds = $interval->h * 3600 + $interval->i * 60 + $interval->s;
   return (int) $seconds;
}

   echo convertISO8601DurationToSeconds('PT1H1M6S');

?>

Upvotes: 0

ficuscr
ficuscr

Reputation: 7063

Here is the best solution I've encountered with Google on how to convert ISO 8601 values to seconds.

+1 for no preg function use. Right tool for the job in my opinion.

Code credit to RuudBurger - copied from gist: https://gist.github.com/w0rldart/9e10aedd1ee55fc4bc74

/**
 * Convert ISO 8601 values like P2DT15M33S
 * to a total value of seconds.
 *
 * @param string $ISO8601
 */
function ISO8601ToSeconds($ISO8601){
    $interval = new \DateInterval($ISO8601);

    return ($interval->d * 24 * 60 * 60) +
        ($interval->h * 60 * 60) +
        ($interval->i * 60) +
        $interval->s;
}

echo ISO8601ToSeconds('P20DT15M33S'); // Returns a value of 1728933

Upvotes: 11

jared.nesbit
jared.nesbit

Reputation: 126

This can be done using the RegEx: ^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$ You can then use the various PHP methods for manipulating RegEx to store the time in variables.

Upvotes: -2

Related Questions