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)