Add TimeCode::fromSeconds method

This commit is contained in:
Romain Neutron 2013-06-25 18:19:15 +02:00
commit 3fa1ea1f4f
2 changed files with 48 additions and 0 deletions

View file

@ -63,4 +63,30 @@ class TimeCode
return new static($hours, $minutes, $seconds, $frames);
}
/**
* Creates timecode from number of seconds.
*
* @param float $seconds
*
* @return TimeCode
*/
public static function fromSeconds($quantity)
{
$minutes = $hours = $frames = 0;
$frames = round(100 * ($quantity - floor($quantity)));
$seconds = floor($quantity);
if ($seconds > 59) {
$minutes = floor($seconds / 60);
$seconds = $seconds % 60;
}
if ($minutes > 59) {
$hours = floor($minutes / 60);
$minutes = $minutes % 60;
}
return new static($hours, $minutes, $seconds, $frames);
}
}

View file

@ -35,4 +35,26 @@ class TimeCodeTest extends TestCase
{
TimeCode::fromString('lalali lala');
}
/**
* @dataProvider provideSeconds
*/
public function testFromSeconds($seconds, $expected)
{
$tc = TimeCode::fromSeconds($seconds);
$this->assertEquals($expected, (string) $tc);
}
public function provideSeconds()
{
return array(
array(0.467, '00:00:00.47'),
array(12.467, '00:00:12.47'),
array(59.867, '00:00:59.87'),
array(72.467, '00:01:12.47'),
array(3599.467, '00:59:59.47'),
array(3600.467, '01:00:00.47'),
array(86422.467, '24:00:22.47'),
);
}
}