twigの標準関数/フィルタだけでカレンダーが作れたのでメモ
yourtemplate.html.twig
{% import 'calendar.html.twig' as cal %}
今月のカレンダー
{{ cal.calendar() }}
翌月のカレンダー
{{ cal.calendar('next month') }}
calendar.html.twig
{% macro calendar(monthOffset) %}
{% set day = date('first day of this month') %}
{% if monthOffset %}
{% set day = day|date_modify(monthOffset) %}
{% endif %}
{% set month = day|date('n') %}
{% set year = day|date('Y') %}
{% set day = day|date_modify('-' ~ day|date('w') ~ 'days') %}
{{ year }}年{{ month }}月
<table>
<tr>
<td>日</td>
<td>月</td>
<td>火</td>
<td>水</td>
<td>木</td>
<td>金</td>
<td>土</td>
</tr>
{% for i in (0..5) %}
<tr>
{% for j in (0..6) %}
{% if day|date('n') == month %}
<td><a href="{{ path('route_name') }}?d={{ day|date('Y/m/d')|e('url') }}">{{ day|date('j') }}</a></td>
{% else %}
<td> </td>
{% endif %}
{% set day = day|date_modify('+1day') %}
{% endfor %}
</tr>
{% endfor %}
</table>
{% endmacro %}