Customization

Custom timezone for SystemClock

If you want a specific timezone instead of PHP's default timezone, you can configure it in several ways:

Option 1: Direct instantiation

<?php

declare(strict_types=1);

use FastForward\Clock\SystemClock;

$clock = new SystemClock('America/Sao_Paulo');

Option 2: Via Fast Forward Config

If you use Fast Forward Config, the timezone can be configured:

<?php

use FastForward\Config\Config;
use FastForward\Clock\ServiceProvider\ClockServiceProvider;
use function FastForward\Container\container;

$config = new Config([
    DateTimeZone::class => 'America/Sao_Paulo',
]);

$container = container($config, new ClockServiceProvider());

Option 3: Override via service provider

<?php

declare(strict_types=1);

use FastForward\Clock\ServiceProvider\ClockServiceProvider;
use FastForward\Clock\SystemClock;
use FastForward\Container\ServiceProvider\ArrayServiceProvider;
use Psr\Clock\ClockInterface;
use Psr\Container\ContainerInterface;
use function FastForward\Container\container;

$customClockProvider = new ArrayServiceProvider([
    SystemClock::class => static fn(ContainerInterface $container): SystemClock => new SystemClock('UTC'),
    ClockInterface::class => static fn(ContainerInterface $container): SystemClock => $container->get(SystemClock::class),
]);

$container = container($customClockProvider, new ClockServiceProvider());

Custom test clock

For testing, use FrozenClock directly or register a custom provider:

<?php

declare(strict_types=1);

use FastForward\Clock\ServiceProvider\ClockServiceProvider;
use FastForward\Clock\FrozenClock;
use FastForward\Container\ServiceProvider\ArrayServiceProvider;
use Psr\Clock\ClockInterface;
use Psr\Container\ContainerInterface;
use function FastForward\Container\container;

$frozenClock = new FrozenClock('2026-04-07 10:00:00');

$testProvider = new ArrayServiceProvider([
    FrozenClock::class => static fn(ContainerInterface $container): FrozenClock => $frozenClock,
    ClockInterface::class => static fn(ContainerInterface $container): FrozenClock => $container->get(FrozenClock::class),
]);

$container = container($testProvider, new ClockServiceProvider());

$clock = $container->get(ClockInterface::class);