В Python я хочу разобрать диапазон дат из строки, чтобы получить дату_от и дату_до

Работаю в Django У меня есть диапазон дат, представленный на форме следующим образом:

<input type="text" class="form-control vans-dates-form-input" id="formGroupExampleInput" placeholder="Example input" name="daterange" value="02/01/2022 - 02/15/2022" />

Я передаю это в представление и хочу разделить даты от и до, чтобы у меня были 'date_from' и 'date_to', с которыми я могу работать.

Вот мое мнение:

from datetime import datetime
from django.shortcuts import render, get_object_or_404


from vans.models import Van


def booking(request):
    """This view returns the booking form page"""

    return render(request, 'booking/booking.html')


def add_to_cart(request, item_id):
    """Adds the van booking to the cart"""
    
    van = get_object_or_404(Van, pk=item_id)
    # This will return the date range as a string
    date_range_str = request.POST.get('daterange')
    # In order to work with it I need it as two dates, date_from and date_to


    return render(request, 'booking/cart.html')
<<<Вам повезло: в pandas есть условная и метко названная функция

, которая принимает pd.date_range и start аргументы даты, а также частоту.end

подробнее здесь в официальных документах

pd.date_range('01 Jan 2022', '05 Jan 2022', freq='D')

DatetimeIndex(['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04',
               '2022-01-05'],
              dtype='datetime64[ns]', freq='D')

каждый объект имеет тип pandas._libs.tslibs.timestamps.Timestamp, поэтому вы можете применять любое количество операций, таких как вычисления или другое.

Я бы рекомендовал просто создать таблицу календаря в вашей базе данных, к которой вы можете присоединиться, чтобы получить ваши частоты, но я полагаю, что это субъективно.

Поскольку у вас есть фиксированный формат для получения диапазона дат, вы можете сделать следующее в файле views.py from datetime import datetime as dt

def add_to_cart(request, item_id):
    """Adds the van booking to the cart"""
    
    van = get_object_or_404(Van, pk=item_id)
    # This will return the date range as a string
    date_range_str = request.POST.get('daterange')
    

    date_range_lst = [data.strip() for data in date_range_str.split('-')]
    date_from = date_range_lst[0]
    date_to = date_range_lst[1]

    # if you want to convert it to datetime object you can change it using:
    date_from = dt.strftime(date_range_lst[0], '%m/%d/%Y')
    date_to = dt.strftime(date_range_lst[1], '%m/%d/%Y')

    return render(request, 'booking/cart.html')
Вернуться на верх