I've built a function to get the first and last day of the current quarter but it's a bit long winded. I was wondering, is there a more succinct way of accomplishing this?
I understand that pandas
has a QuarterBegin()
function, but I couldn't implement it in a more concise way.
import datetime as dt
from dateutil.relativedelta import relativedelta
def get_q(first=None,last=None):
today = dt.date.today()
qmonth = [1, 4, 7, 10]
if first:
for i,v in enumerate(qmonth):
if (today.month-1)//3 == i:
return dt.date(today.year,qmonth[i],1).strftime("%Y-%m-%d")
if last:
firstday = dt.datetime.strptime(get_q(first=True),"%Y-%m-%d")
lastday = firstday + relativedelta(months=3, days=-1)
return lastday.strftime("%Y-%m-%d")
EDIT: Please let me know if this would be better suited to Code Review
is_quarter_end attribute of Pandas. Timestamp (an equivalent of Python's Datetime object) is used to check if the date is the last day of the quarter or not.
There are a few ways to do this, but I've gone with the following: last_date = datetime(year, month + 1, 1) + timedelta(days=-1) . This will calculate the first date of the following month, then subtract 1 day from it to get the last date of the current month.
Why roll your own?
import pandas as pd
quarter_start = pd.to_datetime(pd.datetime.today() - pd.tseries.offsets.QuarterBegin(startingMonth=1)).date()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With