我想编写一个带Dates的两个条件的函数。这是怎么回事:让我说我有两个日期,DATE1 = 30-06-2018和DATE2 = 30-12-2019,以及一个叫做频率的变量(它可以是6或4或1)。
我需要计算这两个DATE1和DATE2之间的频率日期。如果频率为6,则应将DATE1添加6个月,直到它不大于DATE2,即
if frq == 6:
Date_11 = DATE1 + relativedelta(months=+6)
Date_12 = Date_11 + relativedelta(months=+6)
Date_13 = Date_12 + relativedelta(months=+6)
Print(date_11,date_12,date_13)
你可以看到我停止使用Date_13,因为它不能超过它。因为Date_13需要小于DATE2。如果频率为4,我应该每4个月添加一次,
if frq == 4:
Date_11 = DATE1 + relativedelta(months=+4)
Date_12 = Date_11 + relativedelta(months=+4)
Date_13 = Date_12 + relativedelta(months=+4)
Date_14 = Date_13 + relativedelta(months=+4)
Print(date_11,date_12,date_13,date_14)
在这里我停止使用Date_14,因为Date_15将大于DATE2。
有人可以建议我如何使用if和for以及两个条件来编写一个循环吗?
答案 0 :(得分:0)
您可以使用生成器函数和while循环来实现此目的。
import datetime
from dateutil.relativedelta import relativedelta
def _convert_to_date_time_object(date_):
return datetime.datetime.strptime(date_, '%d-%m-%Y').date()
def yield_date_in_between_range(date_one_in_str, date_two_in_str, frequency_):
# Convert input date string into python date time object.
date_one, date_two = map(_convert_to_date_time_object,
[date_one_in_str, date_two_in_str])
# Add month and check whether if it exceeds more than limit.
date_one = date_one + relativedelta(months=+frequency_)
if date_one >= date_two:
raise StopIteration
while date_one < date_two:
yield date_one
date_one = date_one + relativedelta(months=+frequency_)
演示
>> input_date_one = "30-06-2018"
>> input_date_two = "30-12-2019"
>> frequency = 6
>> print(list(yield_date_in_between_range(input_date_one, input_date_two, frequency)))
>> ['30-12-2018', '30-06-2019']
>> input_date_one = "30-06-2018"
>> input_date_two = "30-07-2018"
>> frequency = 6
>>print(list(yield_date_in_between_range(input_date_one, input_date_two, frequency)))
>> []