@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 %}
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вы можете сравнивать даты целиком на больше и меньше не приводя к строке:
current_date >= start_date and current_date <= end_date

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

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

Похожие вопросы