1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# fuzzy datetime things
times = (
("year","years",365*24*60*60), # leap years aren't real
("day","days",24*60*60),
("hour","hours",60*60),
("minute","minutes",60),
("second","seconds",1),
)
from datetime import datetime, timedelta
def fuzzy(seconds,ago=True):
if isinstance(seconds,timedelta):
seconds = seconds.total_seconds()
elif isinstance(seconds,datetime):
seconds = (seconds-datetime.now()).total_seconds()
fmt = "{}"
if ago:
fmt = "in {}" if seconds > 0 else "{} ago"
seconds = abs(seconds)
for t in times:
if seconds >= t[2]:
rounded = round((seconds / t[2])*100)/100
if int(rounded) == rounded:
rounded = int(rounded)
if rounded == 1:
word = t[0]
else:
word = t[1]
return fmt.format(f'{rounded} {word}')
else:
return "now"
|