Новое в Symfony 4.4: Тип формы Неделя

Сколько недель в году? Если вы спросите, большинство людей скажут 52, но правильный ответ будет: 52 и 53, в зависимости от года. Чтобы быть точным, в году 52.1775 недель, и этот избыток накапливается до тех пор, пока году не дадут дополнительную неделю.

Например, самым последним годом с 53 неделями был 2015 год. 31 декабря 2015 года считается частью 53й недели 2015 года (формально 2015-W53), а 1 января 2016 года также считается частью 53й недели 2015 года. и 31 декабря 2019 года, и 1 января 2020 года считаются частью первой недели 2020 года (формально 2020-W01).

Все это определено в стандарте ISO 8601, и это одно из многих запутанных способов поведения, которые вы найдете при работе с датами. Symfony должен решить это для вас, чтобы вы могли сосредоточиться на более важных вещах.

В Symfony 4.4 добавили новое поле формы WeekType, которое позволяет пользователям изменять данные, которые представляют определенный номер недели ISO 8601:

use Symfony\Component\Form\Extension\Core\Type\WeekType;

$builder->add('startDateTime', WeekType::class, [
    // use this if you store week numbers as strings ('2011-W17')
    'input' => 'string',
    // use this if you store week numbers as arrays (e.g. [2011, 17])
    'input' => 'array',

    // renders two  to write the year and week number
    'widget' => 'text',
    // renders a  which is properly rendered by most browsers
    'widget' => 'single_text',
]);

Если ваши целевые браузеры поддерживают это, установите для параметра widget значение single_text, чтобы поле формы отображалось как <input type="week">, это обеспечит лучший пользовательский опыт при работе с данными такого типа.