tygzy
tygzy

Reputation: 716

Datetime: Check if date is in 1 week

What I am trying to do is see if date is in 1 week from currdate

from datetime import datetime, timedelta
import yagmail

year = datetime.now().year
month = datetime.now().month
day = datetime.now().day

currdate = '{}-{}-{}'.format(year, month, day)
currdate = datetime.strptime(currdate, '%Y-%m-%d')

date = '2018-04-01'

days = currdate - timedelta(int(date[-2:]))
days = str(days)
print(days)

if days[8:11] == '07':
    yag = yagmail.SMTP("#########@gmail.com", "######")
    content = ['One Of Your Homework\'s Is Due In 1 Week!']
    yag.send('##########@gmail.com', 'Homework Due Soon!', content)
else:
    print('It Isn\'t')

But it prints:

2018-04-07 00:00:00

It Isnt't

And I'm not sure why. Because days[8:11] is 07.

Upvotes: 1

Views: 7920

Answers (4)

Anton vBR
Anton vBR

Reputation: 18906

I'd create a function that you pass the date as a string. Something like this:

import datetime

def check_if_less_than_seven_days(x):
    d = datetime.datetime.strptime(x, "%Y-%m-%d") # Add .date() if hour doesn't matter
    now = datetime.datetime.now()                 # Add .date() if hour doesn't matter
    return (d - now).days < 7

if check_if_less_than_seven_days("2018-04-18"):
    print('Do something')  # This will not print

if check_if_less_than_seven_days("2018-04-14"): 
    print('Do something')  # This will print

Will print:

'Do something'

Upvotes: 2

Tobias
Tobias

Reputation: 111

I suppose your first line when you initiate datetime.now() three times is just for testing purposes but dont do this as it could end up over different days (if you run this exactly at the milliseconds around midnight..) this will work better in that regard.

now = datetime.datetime.now()
year = now.year
month = now.month
day = now.day

Anyway, read up on datetime timedelta. Just make you logic around that. https://docs.python.org/3/library/datetime.html#timedelta-objects

import datetime
test_date_string = "2018-04-10"
d = datetime.datetime.strptime(test_date_string, "%Y-%m-%d")
now = datetime.datetime.now()

delta = d - now
elif delta.days < 7:
    print("You have less then 7 days to go")

Upvotes: 2

Saurav Panda
Saurav Panda

Reputation: 566

For days[8:11] you get the following output

>>> days[8:11] 
'08 '

So you should use days[8:10]=='07' in case you want to use the same method,as it wont have extra space at the end.

>>> days[8:10] 
'08'

so you should use if days[8:10] == '07':

Upvotes: 0

m0nhawk
m0nhawk

Reputation: 24148

It is not 07. It's 07 (note the trailing space).

The following change will work:

if int(days[8:11]) == 7:

Upvotes: 2

Related Questions