В 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')
, которая принимает 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')