【问题标题】:creating a function that calculates frequency between dates with conditions创建一个计算有条件日期之间频率的函数
【发布时间】:2018-05-28 05:34:15
【问题描述】:

我想写一个函数,它接受两个日期条件。事情是这样的:假设我有两个日期,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 以及两个条件编写一个循环吗?

【问题讨论】:

    标签: python python-3.x datetime for-loop


    【解决方案1】:

    您可以使用生成器函数和 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)))
    >> []
    

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 2016-11-21
      相关资源
      最近更新 更多