Если время больше и меньше одного дня в приложении django

У меня есть приложение django и проблемы с установкой правильных условий для дат:

  1. Я хочу проверить, не прошло ли более 24 часов (1 день) до мероприятия – дни показа
  2. Я хочу проверить, осталось ли менее 24 часов (1 день) до события - показать часы и минуты
  3. Проверьте, находится ли событие между date_from и date_to

Вот мои фильтры:

Задание 1

@register.filter(name='if_more_then_24')
def if_more_then_24(time):
    return time + datetime.timedelta(hours=24) > timezone.now()

Задача 2

@register.filter(name='if_less_then_24')
def if_less_then_24(time):
    return time + datetime.timedelta(hours=24) < timezone.now()

Задача 3

@register.filter(name='now_online')
def now_online(time):
    return time < timezone.now()


@register.filter(name='not_online')
def not_online(time):
    return time > timezone.now()

Но код не работал, потому что когда у меня есть {{ object.event_from }} 11 декабря 2016 г., 17:00. а сегодня 12 декабря 2016 г., 16:31. Счетчик показывает часы 1:28 вместо дней


person git-e    schedule 12.12.2016    source источник
comment
Вы должны быть более конкретными, чем не работает, вы получаете сообщение об ошибке?   -  person Will    schedule 12.12.2016
comment
@проверьте, пожалуйста, мое обновление   -  person git-e    schedule 12.12.2016


Ответы (1)


Я думаю, у вас может быть обратная логика:

def if_more_then_24(time):
    return time + datetime.timedelta(hours=24) > timezone.now()

Если данное time (скажем, когда-то вчера) + 24 часа больше, чем прямо сейчас, это означает, что оно было меньше, чем 24 часа назад (поскольку прибавление 24 часов приводит к получению времени в будущем).

def if_less_then_24(time):
    return time + datetime.timedelta(hours=24) < timezone.now()

Если данное time + 24 часа меньше, чем сейчас, это означает, что time было больше, чем 24 часа назад, потому что добавление дня все еще в прошлом.

Таким образом, где бы вы ни вызывали свои функции, вы будете ожидать противоположного результата. Переключите < и > в этих функциях, и это должно исправить это.

Подробнее о вычитании одного дня см. здесь .

person Will    schedule 12.12.2016