2016-12-12 6 views
0

У меня есть 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 года, 4:31 вечера. счетчик показывает часы 1:28 вместо дней

+3

Вы должны быть более конкретными, чем «не работает», вы получаете сообщение об ошибке? – Will

+0

@will, пожалуйста, проверьте мое обновление –

ответ

2

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

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 часов назад, потому что добавление в день все еще находится в прошлом.

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

See here Подробнее об уходе за один день.