Обновлено:
Калькулятор даты окончания Hugo
Статический генератор Hugo предоставляет встроенные механизмы управления сроком действия контента. Дата окончания (expiryDate) позволяет автоматически скрывать устаревшие страницы – от акций и новостей до временных объявлений. В отличие от ручного удаления, этот подход сохраняет контент в репозитории для повторного использования.
Что такое дата окончания в Hugo
Дата окончания (expiryDate) – это параметр front matter, определяющий момент, после которого страница считается истекшей. По умолчанию Hugo исключает такие страницы из сборки. Это удобно для:
- Временных промо-страниц и акций
- Объявлений о мероприятиях
- Сезонного контента
- Юридических документов с ограниченным сроком действия
Установка даты окончания в front matter
Добавьте параметр expiryDate в метаданные страницы в одном из форматов:
YAML
---
expiryDate: 2026-12-31T23:59:59+03:00
title: 'Новогодняя акция'
---
TOML
+++
expiryDate = 2026-12-31T23:59:59+03:00
title = 'Новогодняя акция'
+++
JSON
{
"expiryDate": "2026-12-31T23:59:59+03:00",
"title": "Новогодняя акция"
}
Формат должен соответствовать стандарту ISO 8601 с указанием часового пояса. Hugo парсит это значение как объект time.Time.
Отображение даты окончания на странице
В шаблонах используйте метод .ExpiryDate для вывода и форматирования:
Базовый вывод
{{ .ExpiryDate }}
<!-- Вывод: 2026-12-31 23:59:59 +0300 +0300 -->
Форматированная дата
{{ .ExpiryDate | time.Format "2 January 2006 года" }}
<!-- Вывод: 31 декабря 2006 года -->
Локализованный формат
{{ .ExpiryDate | time.Format ":date_full" }}
<!-- Вывод: Friday, December 31, 2026 -->
Управление поведением истекших страниц
Временное включение в сборку
Запустите Hugo с флагом для отладки:
hugo --buildExpired
Постоянная настройка в config.toml
[build]
buildExpired = true
Проверка в шаблоне
Показывать предупреждение за 7 дней до истечения:
{{ $daysUntilExpiry := div (sub .ExpiryDate.Unix now.Unix) 86400 }} {{ if and (lt $daysUntilExpiry
7) (ge $daysUntilExpiry 0) }}
<div class="alert">Внимание: контент истекает через {{ $daysUntilExpiry }} дней</div>
{{ end }}
Автоматизация расчета дат публикации
Для планирования контента с заранее известным сроком действия используйте автоматизацию. Скрипт ниже находит свободные слоты для публикации и рассчитывает дату окончания на основе заданного периода.
Скрипт планировщика
#!/bin/bash
PUBLISH_DIR="content/posts"
PERIOD_DAYS=30 # Срок действия в днях
PUBLISH_DAYS="Tue|Thu" # Дни публикации
find_next_slot() {
current_date=$(date +%Y-%m-%d)
while true; do
day_of_week=$(date +%a -d "$current_date")
if [[ "$day_of_week" =~ ^($PUBLISH_DAYS)$ ]]; then
if [ ! -f "$PUBLISH_DIR/$(date +%Y -d "$current_date")/${current_date}-*.md" ]; then
echo "$current_date"
return
fi
fi
current_date=$(date +%Y-%m-%d -d "$current_date + 1 day")
done
}
next_date=$(find_next_slot)
expiry_date=$(date +%Y-%m-%dT23:59:59%:z -d "$next_date + $PERIOD_DAYS days")
cat > "$PUBLISH_DIR/$(date +%Y -d "$next_date")/${next_date}-new-post.md" <<EOF
---
title: "Новый пост"
date: ${next_date}T10:00:00+03:00
expiryDate: ${expiry_date}
draft: false
---
EOF
Сохраните как planner.sh, сделайте исполняемым (chmod +x planner.sh) и запускайте для автоматического создания постов с рассчитанной датой окончания.
Практические сценарии
Акции с таймером
Сочетайте expiryDate с обратным отсчетом на клиентской стороне:
<div data-expiry="{{ .ExpiryDate.Format "2006-01-02T15:04:05Z07:00" }}">
Осталось: <span id="countdown"></span>
</div>
Архив истекших страниц
Создайте отдельный раздел для аналитики:
hugo --buildExpired --destination public/archive
Автоматическая очистка
Добавьте в CI/CD pipeline проверку:
- name: Check for expired content
run: |
expired_count=$(find content -name "*.md" -exec grep -l "expiryDate" {} \; | wc -l)
echo "Страниц с датой окончания: $expired_count"
Используйте дату окончания как инструмент контроля актуальности контента, а не как костыль для удаления страниц. При правильной настройке это повысит качество сайта и избавит от рутинных задач.
Актуальность примеров проверена на Hugo 0.144.0 (2026). Параметры могут изменяться в новых версиях.
Часто задаваемые вопросы
Чем отличается expiryDate от publishDate в Hugo?
publishDate – это дата публикации контента, когда страница становится доступной. expiryDate – дата окончания срока действия, после которой страница считается “истекшей” и исключается из сборки по умолчанию.
Как включить истекшие страницы в продакшен-сборку?
Запускайте hugo с флагом –buildExpired или установите в config.toml параметр buildExpired = true. Это временно включает все страницы с просроченной датой.
Можно ли использовать относительные даты в expiryDate?
Нет, expiryDate требует абсолютную дату в формате ISO 8601. Для динамических расчетов используйте внешние скрипты или шаблонные функции Hugo.
Как проверить, истекла ли страница в шаблоне?
Используйте условие {{ if .ExpiryDate.After now }}…{{ end }} чтобы показывать контент только для активных страниц или выводить предупреждения.
Подходит ли expiryDate для акций и временных предложений?
Да, идеально. Установите expiryDate на дату завершения акции, и страница автоматически скроется с сайта, избавляя от ручного удаления.
Похожие калькуляторы и статьи
- Рассчитать дни от даты – калькулятор онлайн
- Рассчитать период между датами онлайн: калькулятор дней
- Рассчитать время онлайн с датами: точный калькулятор дней и часов
- Рассчитать срок по датам онлайн – калькулятор разницы в днях и месяцах
- Калькулятор дней онлайн 2026 – быстрый расчёт дат
- Рассчитать год рождения по возрасту