CloudCastle Clock

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

Démarrage rapide

Production

use CloudCastle\Clock\Contract\ClockInterface;
use CloudCastle\Clock\SystemClock;

final class InvoiceService
{
    public function __construct(private readonly ClockInterface $clock)
    {
    }

    public function issue(): Invoice
    {
        return new Invoice(issuedAt: $this->clock->now());
    }
}

$service = new InvoiceService(SystemClock::utc());

Test

use CloudCastle\Clock\MockClock;

$clock = MockClock::from('2026-01-01 00:00:00', 'UTC');
$service = new InvoiceService($clock);

$invoice = $service->issue();          // always 2026-01-01
$clock->advance(86_400.0);             // a day passes instantly

Durées et échéances

use CloudCastle\Clock\Deadline;
use CloudCastle\Clock\TimeSpan;

$timeout = TimeSpan::fromString('1m 30s');
$deadline = Deadline::after($clock, $timeout);

while (!$deadline->isExpired()) {
    // time-bounded work; $deadline->remaining() is the leftover
}

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano