5

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

PT1H1M6S

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

Shayan Arif
  • 59
  • 1
  • 7
  • Possible duplicate of [Converting Youtube Data API V3 video duration format to seconds in JavaScript/Node.js](https://stackoverflow.com/questions/22148885/converting-youtube-data-api-v3-video-duration-format-to-seconds-in-javascript-no) – ficuscr Jun 15 '17 at 17:39
  • Others are more [PHP specific](https://stackoverflow.com/questions/24393230/convert-youtube-api-v3-video-duration-in-php) but that is the better answer. Maybe makes sense to parse in JS anyway? Not sure for your case. – ficuscr Jun 15 '17 at 17:40
  • @ficuscr , i tried that php solution but it gives in Hour minutes and seconds format . i am looking for only seconds format. – Shayan Arif Jun 15 '17 at 17:43
  • 1
    Sorry @Andreas moved it into an answer because I thought saying 'use division' might be too snarky :) – ficuscr Jun 15 '17 at 17:49

3 Answers3

10

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
ficuscr
  • 6,975
  • 2
  • 32
  • 52
0

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

?>
Mark Fulghum
  • 550
  • 4
  • 13
-2

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.

jared.nesbit
  • 126
  • 4