2017-09-02 28 views
1

特定のデータがある場合、前四半期の開始日と終了日を取得する最も簡単できれいな方法を知りたいと思います。例えば日付と会計年度末から四半期の開始日と終了日を取得する

、次の日付を与えられた:

from datetime import datetime 
example_date = datetime.strptime('2017-05-12', '%Y-%m-%d') 

会計年度は、9月(month=9)で終了した場合、結果は次のようになります。

datetime.datetime(2017,01,01), datetime.datetime(2017,03,31) 

他端には、財政場合10月に終了した年(月= 10)は結果は

datetime.datetime(2017,02,01), datetime.datetime(2017,04,30) 

def get_range(date_in, fy_end_month): 
    pass 

答えて

2

は、次の2つの関数を定義することができます:1つの所与の四半期の開始日と終了日を取得するために指定した日付の四半期を取得し、他の機能は、このようなものになるだろう。前四半期の開始日と終了日を取得するには、現在の四半期の1つを減算するだけで済みます(第1四半期の処理もあります)。

import datetime as dt 
from dateutil.relativedelta import relativedelta 

def get_quarter(date): 
    """ 
    Returns the calendar quarter of `date` 
    """ 
    return 1+(date.month-1)//3 

def quarter_start_end(quarter, year=None): 
    """ 
    Returns datetime.daet object for the start 
    and end dates of `quarter` for the input `year` 
    If `year` is none, it defaults to the current 
    year. 
    """ 
    if year is None: 
     year = dt.datetime.now().year 
    d = dt.date(year, 1+3*(quarter-1), 1) 
    return d, d+relativedelta(months=3, days=-1) 

これらが定義されると、前の四半期を取得する簡単な関数を定義できます。

def prev_quarter_range(date): 
    """ 
    Returns the start and end dates of the previous quarter 
    before `date`. 
    """ 
    if isinstance(date, str): 
     date = parser.parse(date) 
    year = date.year 
    q = get_quarter(date)-1 
    # logic to handle the first quarter case 
    if q==0: 
     q = 4 
     year -= 1 
    return quarter_start_end(q, year) 

そして今、あなたは変数に返された日付を割り当てることができます

prev_q_start, prev_q_end = prev_quarter_range('2-feb-2011') 

print(prev_q_start) 
print(prev_q_end) 

# prints: 
2010-10-01 
2010-12-31 
関連する問題