Как в python проверить дату, что она входит в диапазон: текущий квартал или предыдущий квартал +25 дней?

Как в python проверить дату, что она входит в диапазон: текущий квартал или предыдущий квартал +25 дней?

Например, пусть формат даты будет
YYYY-MM-DD, то получается:
2015-07-10 входит (текущий кв)
2015-03-07 не входит
2015-06-25 входит (прошлый кв + 25 дней)
2015-04-21 входит (прошлый кв +25 дней)
2014-06-30 не входит
2015-01-02 не входит
И т.д.

Сегодня у нас 2015-07-17 и условие "прошлый кв + 25 дней пока работает." Но 2015-07-26 уже весь прошлый квартал должен быть отброшен как не соответствующий условию.
  • Вопрос задан
  • 3702 просмотра
Решения вопроса 1
@pcdesign Автор вопроса
Накидал как-то так.
Вроде работает.
from datetime_periods import period
from dateutil.parser import parse
import math
import datetime

current_date = datetime.datetime.now()


def get_num_quarter(ref):  # Возвращает номер квартала
    return math.ceil(ref.month/3.)


def start_end_quarter(ref):  # Возвращает первый и последний день квартала
    return period(ref, 'quarter')


def previous_quarter(ref):  # Возвращает 1-ый день предыдущего квартала
    quarter = (ref.month - 1) // 3
    prev_quarter = (quarter - 1) % 4
    return datetime.datetime(ref.year if quarter > 0
                             else ref.year-1, prev_quarter*3+1, 1)

dates = "2015-07-10 2015-03-07 2015-06-25 2015-04-21 2014-07-30".split(" ")

for d in dates:
    date_obj = parse(d)
    # Проверяем входит ли дата в текущий квартал
    if (current_date.year == date_obj.year
            and get_num_quarter(date_obj) == get_num_quarter(current_date)):
        print(d + " - Входит. Т.к. дата относится к текущему кварталу")
        continue

    # Проверяем условие: предыдущий кв. + 25 дней
    prev_date = previous_quarter(current_date)
    start = start_end_quarter(prev_date)[0]
    end = start_end_quarter(prev_date)[1] + datetime.timedelta(days=25)
    if start < date_obj and current_date < end:
        print(d + " - Входит. Т.к. предыдущий кв. + 25 дней еще не закончились")
    else:
        print(d + " - Не входит в диапазон")


Результат:
2015-07-10 - Входит. Т.к. дата относится к текущему кварталу
2015-03-07 - Не входит в диапазон
2015-06-25 - Входит. Т.к. предыдущий кв. + 25 дней еще не закончились
2015-04-21 - Входит. Т.к. предыдущий кв. + 25 дней еще не закончились
2014-07-30 - Не входит в диапазон
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@deliro
datetime и timedelta.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы