summaryrefslogtreecommitdiffhomepage
path: root/apioforum/fuzzy.py
blob: 58f8c6b0d018eb19aa167d9961160fea26d1b39a (plain)
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"