@cromvvell

Как определить входит ли определённый отрезок времени в другой?

В бд хранятся даты в формате yyyy-mm-dd. Задача определить относиться ли текущая дата к какому либо из промежутков, если да, то вывести его. Проблема в том, что шаблон так и остаётся пустым (обрабатывать дату из бд с другой стороны тоже пробовал)
модель самого промежутка:
class TimePeriod(models.Model):
    start_date = models.DateField()
    end_date = models.DateField()
    description = models.CharField(max_length=200)


view:
def view_timetable(request):
    periods = TimePeriod.objects.all()
    today = datetime.today()
    periods_to_show = []
    for period in periods:
        if int(str(period.start_date)[0:2]) <= today.year <= int(str(period.end_date)[0:2]) \
                and int(str(period.start_date)[3:5]) <= today.month <= int(str(period.end_date)[3:5]) \
                and int(str(period.start_date)[6:10]) <= today.day <= int(str(period.end_date)[6:10]):
            periods_to_show.append(period)
    return render(request, "timetable.html", context={'periods': periods_to_show})


шаблон:
{% extends 'base.html' %}

{% block content %}
    {% for period in periods %}
        <p>С {{ period.start_date }} по {{ period.end_date }} - {{ period.description }}</p>
    {% endfor %}
{% endblock %}
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вы можете сравнивать даты целиком на больше и меньше не приводя к строке:
current_date >= start_date and current_date <= end_date

А еще можно воспользоваться спорным фирменным питоновским синтаксисом:
start_date <= current_date <= end_date
Если все эти переменные типа datetime, то всё будет как надо.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы