user13470314
user13470314

Reputation: 29

How to replace the day in a date with another one?

I'm trying to replace the day in my if statement for my date but I keep getting this output for my year. 05/15/5 besides 05/15/2020 . Code is below:

today_date = datetime.datetime.now()
date = today_date.date()
formatted_date = datetime.date.strftime(date, "%m/%d/%Y")

mmonth = date.month
myear = date.year
mdate = date.day

if mdate < 7:
    m0weekend = formatted_date.replace(str(myear),str(mmonth),1)
else:
    m0weekend = formatted_date.replace(str(myear),str(mmonth),15)

Upvotes: 1

Views: 9915

Answers (3)

Daweo
Daweo

Reputation: 36450

You might get today datetime.date directly from datetime rather than creating datetime.datetime and converting to date. After you have today you might create needed datetime.date and turn it into str, i.e.:

import datetime
today = datetime.date.today()
date = datetime.date(today.year, today.month, 1 if today.day < 7 else 15)
formatted_date = datetime.date.strftime(date, "%m/%d/%Y")
print(formatted_date)  # 05/15/2020

Upvotes: 1

chumbaloo
chumbaloo

Reputation: 721

formatted_date is actually a string. You are using the str.replace() method not the datetime.date.replace() method.

import datetime

today_date = datetime.datetime.now()
pre_formatted_date = today_date.date()


mmonth = pre_formatted_date.month
myear = pre_formatted_date.year
mdate = pre_formatted_date.day

if mdate < 7:
    pre_formatted_date = pre_formatted_date.replace(day=1)
else:
    pre_formatted_date = pre_formatted_date.replace(day=15)

print(pre_formatted_date)
formatted_date = pre_formatted_date.strftime("%m/%d/%Y")
print(formatted_date)

Which has the following output:

2020-05-15
05/15/2020

Upvotes: 0

Helio Santos
Helio Santos

Reputation: 6805

it's easier to replace the day before converting to a string:
date = date.replace(day=1)

or, in your case:

if mdate < 7:
    m0weekend = date.replace(day=1)
else:
    m0weekend = date.replace(day=15)

Upvotes: 8

Related Questions