Reputation: 69
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
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
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
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