@@ -571,4 +571,112 @@ public function testToTimeString()
571571 $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
572572 $ this ->assertEquals ('13:20:33 ' , $ time ->toTimeString ());
573573 }
574+
575+ //--------------------------------------------------------------------
576+ // Add/Subtract
577+ //--------------------------------------------------------------------
578+
579+ public function testCanAddSeconds ()
580+ {
581+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
582+ $ newTime = $ time ->addSeconds (10 );
583+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
584+ $ this ->assertEquals ('2017-01-10 13:20:43 ' , $ newTime ->toDateTimeString ());
585+ }
586+
587+ public function testCanAddMinutes ()
588+ {
589+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
590+ $ newTime = $ time ->addMinutes (10 );
591+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
592+ $ this ->assertEquals ('2017-01-10 13:30:33 ' , $ newTime ->toDateTimeString ());
593+ }
594+
595+ public function testCanAddHours ()
596+ {
597+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
598+ $ newTime = $ time ->addHours (3 );
599+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
600+ $ this ->assertEquals ('2017-01-10 16:20:33 ' , $ newTime ->toDateTimeString ());
601+ }
602+
603+ public function testCanAddDays ()
604+ {
605+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
606+ $ newTime = $ time ->addDays (3 );
607+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
608+ $ this ->assertEquals ('2017-01-13 13:20:33 ' , $ newTime ->toDateTimeString ());
609+ }
610+
611+ public function testCanAddMonths ()
612+ {
613+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
614+ $ newTime = $ time ->addMonths (3 );
615+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
616+ $ this ->assertEquals ('2017-04-10 13:20:33 ' , $ newTime ->toDateTimeString ());
617+ }
618+
619+ public function testCanAddMonthsOverYearBoundary ()
620+ {
621+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
622+ $ newTime = $ time ->addMonths (13 );
623+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
624+ $ this ->assertEquals ('2018-02-10 13:20:33 ' , $ newTime ->toDateTimeString ());
625+ }
626+
627+ public function testCanAddYears ()
628+ {
629+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
630+ $ newTime = $ time ->addYears (3 );
631+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
632+ $ this ->assertEquals ('2020-01-10 13:20:33 ' , $ newTime ->toDateTimeString ());
633+ }
634+
635+ public function testCanSubtractSeconds ()
636+ {
637+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
638+ $ newTime = $ time ->subSeconds (10 );
639+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
640+ $ this ->assertEquals ('2017-01-10 13:20:23 ' , $ newTime ->toDateTimeString ());
641+ }
642+
643+ public function testCanSubtractMinutes ()
644+ {
645+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
646+ $ newTime = $ time ->subMinutes (10 );
647+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
648+ $ this ->assertEquals ('2017-01-10 13:10:33 ' , $ newTime ->toDateTimeString ());
649+ }
650+
651+ public function testCanSubtractHours ()
652+ {
653+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
654+ $ newTime = $ time ->subHours (3 );
655+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
656+ $ this ->assertEquals ('2017-01-10 10:20:33 ' , $ newTime ->toDateTimeString ());
657+ }
658+
659+ public function testCanSubtractDays ()
660+ {
661+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
662+ $ newTime = $ time ->subDays (3 );
663+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
664+ $ this ->assertEquals ('2017-01-07 13:20:33 ' , $ newTime ->toDateTimeString ());
665+ }
666+
667+ public function testCanSubtractMonths ()
668+ {
669+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
670+ $ newTime = $ time ->subMonths (3 );
671+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
672+ $ this ->assertEquals ('2016-10-10 13:20:33 ' , $ newTime ->toDateTimeString ());
673+ }
674+
675+ public function testCanSubtractYears ()
676+ {
677+ $ time = Time::parse ('January 10, 2017 13:20:33 ' , 'America/Chicago ' );
678+ $ newTime = $ time ->subYears (3 );
679+ $ this ->assertEquals ('2017-01-10 13:20:33 ' , $ time ->toDateTimeString ());
680+ $ this ->assertEquals ('2014-01-10 13:20:33 ' , $ newTime ->toDateTimeString ());
681+ }
574682}
0 commit comments