No need to re-implement object compare, PHP knows how to do that by-it-self.

$a = new TimeValue('12:15:20');
$b = new TimeValue('12:15:21');

var_dump( $a == $b ); # false
var_dump( $a > $b );  # false
var_dump( $a >= $b ); # false
var_dump( $a < $b );  # true
var_dump( $a <= $b ); # true
I would make add() and sub() methods return the same object ($this). Like in  DateTime::add.

If you would, in the future, need this 2 methods, to return new object, then I would create new class, for example TimeValueImmutable, and extend it with TimeValue, and just modify this 2 methods. Just like in the DateTimeImmutable class.
Since we are talking about time periods, then there is not need for DateTime use. User should have a possibility to input his own format.

  Changes:
   - if I remove DateTime, then __construct cannot have default value;
   - added format input, so users can choose what format is coming in, instead of hard-coded ones (new TimeValue('12:15:20', 'H:i:s') || new TimeValue('44120', 's'));
   - time period can be negative (new TimeValue('-12:15:20', 'H:i:s'));
   - formatting getTime() method upgraded (also supports minus sign if negative);
   - upgraded static average() method
   - added static sum() method
Fixed unit test.
Merge pull request #1 from Glavic/format

Major upgrade (Format branch)
Added test for TimeValue::sum()
Delete composer.lock
Added composer.lock to .gitignore
Fixed failing test
Updated for new TimeValue::sum() method
Updated for new $format argument
Modified return description to reflect new behaviour
Removed 'Vascowhite' folder
Changed namespace to Time. May have to revert this
Revert "Changed namespace to Time. May have to revert this"

This reverts commit ba21057d9b6707cbbb66adf2d7cf43af51e86776.
Fixed my balls up!
Delete TimeValueTest.php
Added composer.phar to ignore list.