Skip to content

Quick start

github-actions[bot] edited this page Jul 14, 2026 · 1 revision

Быстрый старт

Установка

composer require cloudcastle/clock

Требуется PHP 8.1+. Единственная runtime-зависимость — psr/clock.

Продакшн: системные часы

<?php

declare(strict_types=1);

use CloudCastle\Clock\SystemClock;

$clock = SystemClock::utc();      // кэшированный UTC-экземпляр

$clock->now();                    // DateTimeImmutable
$clock->timestamp();              // int — без создания объектов
$clock->microtime();              // float — секунды.микросекунды

Часы как PSR-20-зависимость

use Psr\Clock\ClockInterface;

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

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

Тест: виртуальное время

use CloudCastle\Clock\MockClock;

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

$clock->sleep(3600.0);                     // мгновенно: +1 час виртуального времени
$clock->now()->format('H:i');              // 01:00

$clock->advance(90.5);                     // сдвиги с точностью до микросекунды
$clock->modify('next monday');
$clock->rewind(new \DateInterval('P1D'));

Легаси без DI: глобальный слот

use CloudCastle\Clock\Clock;
use CloudCastle\Clock\ClockHolder;

ClockHolder::set(MockClock::from('2026-01-01', 'UTC')); // bootstrap теста
Clock::now();                                           // из любого места кода
Clock::now('+1 hour');                                  // DatePoint с модификатором
ClockHolder::reset();                                   // tearDown

Что дальше

Clone this wiki locally