Хочет создать поле выбора динамически, т.е. текущее время после этого + 30 мин. - PullRequest
0 голосов
/ 03 июля 2018

Мой код указан ниже:

def datetime_result():
    t = datetime.datetime.now()
    intervalTime = 30

    currenttime = t.minute

    checktm = int(currenttime) - int(intervalTime)

    if checktm < 0:
        addtime = abs(checktm)
    elif checktm > 0:
        addtime = intervalTime - checktm
    else:
        addtime = checktm

    opentime = t + datetime.timedelta(minutes=int(addtime))
    closetime = datetime.time(22, 30, 0)
    firsttime = opentime + datetime.timedelta(minutes=60)

    start_time = opentime.strftime('%H:%M')
    end_time = closetime.strftime('%H:%M')
    slot_time = 30

    # Start date from today to next 5 day
    start_date = datetime.datetime.now().date()
    end_date = datetime.datetime.now().date() + datetime.timedelta(days=0)

    days = []
    Delivery_Time_CHOICES = ""
    date = start_date
    while date <= end_date:
        time = datetime.datetime.strptime(start_time, '%H:%M')
        end = datetime.datetime.strptime(end_time, '%H:%M')
        while time <= end:
            Delivery_Time_CHOICES += ('(' + "'" + time.strftime("%I.%M%p")
                + "'" + ', ' + "'" + time.strftime("%I.%M%p") + "'" + '),')
            time += datetime.timedelta(minutes=slot_time)
        date += datetime.timedelta(days=1)
    return '(' + Delivery_Time_CHOICES + ')'

Этот код будет генерировать время из текущего времени + 30 минут на время подопечного. когда я вызывал этот метод в поле выбора, я получал ошибку "строковый индекс вне диапазона" , и когда я помещал напечатанное значение этого метода непосредственно в переменную поля выбора, тогда его работа.

1 Ответ

0 голосов
/ 03 июля 2018

Проверьте модуль dateutils.relativedelta.

Вы можете легко манипулировать объектами даты и времени, устанавливать значения часов, минут и секунд и т. Д. Или использовать их для изменения даты и времени на требуемые часы / минуты / секунды и т. Д.

from datetime import datetime
from dateutil.relativedelta import relativedelta

my_original_datetime = datetime.now()

minutes_offset = 30

opening_time = datetime.now() + relativedelta(minute=0, seconds=0, microsecond=0)
closing_time = datetime.now() + relativedelta(hour=17, minute=0, seconds=0, microsecond=0)

delivery_slot_start = opening_time
delivery_slot_end = delivery_slot_start + relativedelta(minutes=minutes_offset)

available_delivery_times = [(delivery_slot_start.strftime('%H:%M'), delivery_slot_end.strftime('%H:%M'))]

while delivery_slot_end <= closing_time:
    delivery_slot_start = delivery_slot_end
    delivery_slot_end += relativedelta(minutes=minutes_offset)
    available_delivery_times.append(
        (delivery_slot_start.strftime('%H:%M'), 
         delivery_slot_end.strftime('%H:%M'))
    )

print(tuple(available_delivery_times))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...