Обновлено:

Калькулятор даты окончания Hugo

Статический генератор Hugo предоставляет встроенные механизмы управления сроком действия контента. Дата окончания (expiryDate) позволяет автоматически скрывать устаревшие страницы – от акций и новостей до временных объявлений. В отличие от ручного удаления, этот подход сохраняет контент в репозитории для повторного использования.

Что такое дата окончания в Hugo

Дата окончания (expiryDate) – это параметр front matter, определяющий момент, после которого страница считается истекшей. По умолчанию Hugo исключает такие страницы из сборки. Это удобно для:

  • Временных промо-страниц и акций
  • Объявлений о мероприятиях
  • Сезонного контента
  • Юридических документов с ограниченным сроком действия
Рассчитать дату окончания контента
Например: 2026-01-01T10:00
От 1 до 9999 дней
Примеры front matter с рассчитанной датой
YAML
TOML
JSON

Установка даты окончания в 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 на дату завершения акции, и страница автоматически скроется с сайта, избавляя от ручного удаления.

  1. Рассчитать дни от даты – калькулятор онлайн
  2. Рассчитать период между датами онлайн: калькулятор дней
  3. Рассчитать время онлайн с датами: точный калькулятор дней и часов
  4. Рассчитать срок по датам онлайн – калькулятор разницы в днях и месяцах
  5. Калькулятор дней онлайн 2026 – быстрый расчёт дат
  6. Рассчитать год рождения по возрасту