In the below code , from the month and year, need 1st and last date of the month
for ex month =3 and year= 2022
first_date = 2021-03-01 00:00:00
last_date = 2021-03-31 00:00:00
I tried with calendar but it simply returns (1 ,31)
import calendar
month =3
year= 2022
print( calendar.monthrange(2002, 1))
CodePudding user response:
From monthrange() you will get the first day and the number of days in that month. You can use the datetime method to convert it to date.
month =3
year= 2022
first, last = calendar.monthrange(year, month)
print(first, last)
print(datetime.datetime(year, month, 1))
print(datetime.datetime(year, month, last))
CodePudding user response:
You could write your own function to calculate the last day of the month:
def last_day_of_month(date):
if date.month == 12:
return date.replace(day=31)
return date.replace(month=date.month 1, day=1) - datetime.timedelta(days=1)
So:
>>> last_day_of_month(datetime.date(2021, 3, 19))
datetime.date(2021, 3, 31)
Similarly, we can use a one-liner for the first date:
(dt.replace(day=1) datetime.timedelta(days=32)).replace(day=1)
So:
dt = datetime.datetime(2021, 3, 19)
print((dt.replace(day=1) datetime.timedelta(days=32)).replace(day=1))
>>> 2021-03-01 00:00:00
CodePudding user response:
you can do it using datetime
module
import datetime
def get_last_day_of_month(day):
next_month = day.replace(day=28) datetime.timedelta(days=4)
return next_month - datetime.timedelta(days=next_month.day)
the output will be:
for month in range(1, 13):
print(get_last_day_of_month(datetime.date(2020, month, 1)))
2020-01-31
2020-02-29
2020-03-31
2020-04-30
2020-05-31
2020-06-30
2020-07-31
2020-08-31
2020-09-30
2020-10-31
2020-11-30
2020-12-31
for the first day you can just put the day always 1