2014-01-23 3 views
0

Я сделал форму, чтобы пользователи могли добавлять absences, состоящий из диапазонов дат-времени.Django - Datetime range end time excluded

datetime range editor

Я оставил время по желанию, поэтому они могут установить, например 2014-01-23 к 2014-01-24

Но поскольку конечные сохраненные значения будут 2014-01-23 00:00:00 к 2014-01-24 00:00:00, этот диапазон будет фактически покрывают только 23. Скорее всего, пользователь захочет, чтобы мы рассмотрели 2014-01-25 00:00:00 вместо этого.

Это хорошая идея хранить эти данные таким образом?

Должен ли я автоматически увеличивать конечную дату, если конечное время не установлено?


Update

Следуя совету @MartijnPieters, вот как я проверил погоду end_time был пуст

def clean_end_time(self): 
    end_dt = self.cleaned_data.get('end_time', None) 
    if end_dt.time().min == end_dt.time(): 
     return datetime.combine(end_dt, end_dt.time().max) 
    return self.cleaned_data.get('end_time', None) 

Единственная небольшая проблема будет в том, что пользователь не может выбрать 00:00, как end_time по назначению

ответ

3

Установите время окончания до 23:59:59.999999, если время не установлено, вместо этого.

Теперь ваш диапазон даты и времени идет от 2014-01-23 00:00:00 до 2014-01-24 23:59:59.999999, 1 микросекунды до того 2014-01-25 (который не часть диапазона).

Вы можете использовать datetime.time.max, чтобы обеспечить это значение:

end = datetime.datetime.combine(datetime.date(2014, 1, 24), datetime.time.max) 
+0

Это было бы лучше, на самом деле. Я попробую. –

+0

Не могли бы вы рассказать мне, как я могу проверить, не установлено ли время? –

+0

@PierredeLESPINAY: оставить значение полностью пустым вместо заполнения по умолчанию * или * установить время по умолчанию '23: 59'. –