PHP PHP  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Дата, время и локализация

Ошибки со временем обычно появляются не в формуле, а на границе между часовыми поясами, строковым форматом и календарным смыслом. Вопросы охватывают DateTimeImmutable, интервалы, Intl и хранение момента времени.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Различайте абсолютный момент, местное представление и календарное правило. Таймер — 70 минут.
Вопрос 1 из 25
Что возвращает modify у DateTimeImmutable?
PHP
$start = new DateTimeImmutable('2026-07-14 10:00:00');
$changed = $start->modify('+1 day');
var_dump($start === $changed);
Вопрос 2 из 25
Какую календарную дату покажет объект после добавления одного дня без изменения исходного DateTimeImmutable?
PHP
$d=new DateTimeImmutable('2026-01-01');
$d->modify('+1 day');
echo $d->format('Y-m-d');
Вопрос 3 из 25
Почему immutable-объект удобен при передаче между сервисами?
PHP
function expiresAt(DateTimeImmutable $createdAt): DateTimeImmutable
{
    return $createdAt->modify('+30 days');
}
$createdAt = new DateTimeImmutable('2026-07-14');
$expiresAt = expiresAt($createdAt);
Вопрос 4 из 25
Как прибавить календарный месяц?
PHP
$date = new DateTimeImmutable('2026-01-31');
$next = $date->add(new DateInterval('P1M'));
echo $next->format('Y-m-d');
Вопрос 5 из 25
Как сравнить два момента?
Вопрос 6 из 25
Меняет ли setTimezone абсолютный момент?
PHP
$utc = new DateTimeImmutable('2026-07-14 12:00:00', new DateTimeZone('UTC'));
$local = $utc->setTimezone(new DateTimeZone('Europe/Tallinn'));
var_dump($utc->getTimestamp() === $local->getTimestamp());
Вопрос 7 из 25
Как хранить момент события в распределённой системе?
PHP
$local = new DateTimeImmutable('2026-07-14 10:00:00', new DateTimeZone('Europe/Tallinn'));
$storedUtc = $local->setTimezone(new DateTimeZone('UTC'));
$originalZone = $local->getTimezone()->getName();
Вопрос 8 из 25
Почему фиксированное +02:00 не равно Europe/Tallinn?
PHP
$fixed = new DateTimeZone('+02:00');
$regional = new DateTimeZone('Europe/Tallinn');
$summer = new DateTimeImmutable('2026-07-14 12:00:00', $regional);
echo $summer->format('P');
Вопрос 9 из 25
Что выведет timestamp после смены зоны?
PHP
$d=new DateTimeImmutable('2026-01-01 00:00:00',new DateTimeZone('UTC'));
$e=$d->setTimezone(new DateTimeZone('Europe/Tallinn'));
echo $d->getTimestamp()===$e->getTimestamp()?'same':'different';
Вопрос 10 из 25
Как обрабатывать пользовательское «встреча в 10:00»?
Вопрос 11 из 25
Для чего IntlDateFormatter?
PHP
$formatter = new IntlDateFormatter(
    'ru_RU',
    IntlDateFormatter::LONG,
    IntlDateFormatter::SHORT,
    'Europe/Tallinn'
);
echo $formatter->format(new DateTimeImmutable('2026-07-14 18:30:00'));
Вопрос 12 из 25
Почему number_format недостаточен для всех валют и локалей?
PHP
$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency(1234.5, 'EUR');
Вопрос 13 из 25
Что нужно проверить перед использованием intl?
Вопрос 14 из 25
Какой принцип важен при локализации?
Вопрос 15 из 25
Что делает locale ru_RU с самим числом 1234.5?
Вопрос 16 из 25
Какой формат удобен для машинного обмена моментом?
PHP
$moment = new DateTimeImmutable('2026-07-14 12:30:00', new DateTimeZone('UTC'));
echo $moment->format(DateTimeInterface::RFC3339_EXTENDED);
Вопрос 17 из 25
Почему createFromFormat может вернуть объект для 31 февраля?
PHP
$date = DateTimeImmutable::createFromFormat('!Y-m-d', '2026-02-31');
$errors = DateTimeImmutable::getLastErrors();
var_dump($date?->format('Y-m-d'), $errors);
Вопрос 18 из 25
Что означает ! в начале формата createFromFormat?
Вопрос 19 из 25
Как сохранить микросекунды?
Вопрос 20 из 25
Почему строка 03/04/2026 неоднозначна?
Вопрос 21 из 25
Почему new DateTimeImmutable("now") внутри доменного метода делает тест хрупким?
PHP
final class Subscription
{
    public function isExpired(Clock $clock): bool
    {
        return $clock->now() >= $this->expiresAt;
    }
}
Вопрос 22 из 25
Какие два теста нужны для срока действия до 12:00?
PHP
$before = new FrozenClock('2026-07-14 11:59:59');
$atBoundary = new FrozenClock('2026-07-14 12:00:00');
assert($offer->isActive($before));
assert(!$offer->isActive($atBoundary));
Вопрос 23 из 25
Как исключить зависимость теста от системной зоны?
Вопрос 24 из 25
Что журналировать при ошибке расписания?
Вопрос 25 из 25
Как протестировать переход летнего времени?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу