Clocks ####### .. highlight:: php System time based ================= .. _system_clock_class: SystemClock ----------- ``Arokettu\Clock\SystemClock`` .. note:: Can be installed separately as ``arokettu/system-clock``. See :ref:`system_clock_package`. A basic system clock:: now(); // whatever time is now ShiftedClock ------------ ``Arokettu\Clock\ShiftedClock`` A system clock with a constant time shift:: now(); // exactly a week ago Abstract time based =================== StaticClock ----------- .. versionchanged:: 1.6/2.6 Float timestamps are accepted ``Arokettu\Clock\StaticClock`` Returns a specific time that can be changed manually:: now(); // happy new 2007 $clock->set(new DateTimeImmutable('2015-10-21')); // back to the future MutableClock ------------ .. versionchanged:: 1.6/2.6 Float timestamps are accepted ``Arokettu\Clock\MutableClock`` A clock that exposes a regular mutable DateTime that can be manipulated:: setInstance($dateTime); // use the attached instance $dateTime->setDate(2022, 03, 03); $dateTime->setTime(12, 00, 00); $clock->now(); // 2022-03-03T12:00:00 // or use the exposed property $clock->dateTime->modify('+1 day'); $clock->now(); // 2022-03-03T12:00:00 TickingClock ------------ ``Arokettu\Clock\TickingClock`` A clock that advances for a DateInterval value on every call:: now(); // 2022-02-03T12:34:00 $clock->now(); // 2022-02-03T12:35:00 CallbackClock ------------- ``Arokettu\Clock\CallbackClock`` A clock that returns any time generated by a closure:: yield from $values); $clock->now(); // whatever callback returns .. note:: You can do a similar logic without any library by using an anonymous class: :: now()->format('c \\m\\s: u'), PHP_EOL; // 2012-03-04T05:06:07+00:00 ms: 899000 // round to weeks $clock = new RoundingClock($innerClock, RoundingClock::ROUND_WEEKS); // same as $clock = RoundingClock::toWeeks($innerClock); echo $clock->now()->format('c'), PHP_EOL; // 2012-02-27T00:00:00+00:00, nearest Monday Supported precisions: * microseconds (``RoundingClock::ROUND_MICROSECONDS``) * milliseconds (``RoundingClock::ROUND_MILLISECONDS``) * seconds (``RoundingClock::ROUND_SECONDS``) * minutes (``RoundingClock::ROUND_MINUTES``) * hours (``RoundingClock::ROUND_HOURS``) * days (``RoundingClock::ROUND_DAYS``) * ISO weeks (``RoundingClock::ROUND_WEEKS``) * months (``RoundingClock::ROUND_MONTHS``) * calendar years (``RoundingClock::ROUND_YEARS``) * ISO years (``RoundingClock::ROUND_ISO_YEARS``) Offset Clock ------------ .. versionadded:: 1.5/2.5 ``Arokettu\Clock\OffsetClock`` A wrapper clock with a constant time shift:: now(); // exactly a week ago