|
|
@ -8,10 +8,44 @@ prettyDate reference date =
|
|
8
|
8
|
let referenceSeconds = Date.toTime reference
|
|
9
|
9
|
dateSeconds = Date.toTime date
|
|
10
|
10
|
diffSeconds = referenceSeconds - dateSeconds
|
|
11
|
|
in format diffSeconds
|
|
|
11
|
in format << toRelativeTime <| diffSeconds
|
|
12
|
12
|
|
|
13
|
|
format : Float -> String
|
|
14
|
|
format diff =
|
|
|
13
|
type RelativeTime = JustNow
|
|
|
14
|
| Minute Int
|
|
|
15
|
| Hour Int
|
|
|
16
|
| Day Int
|
|
|
17
|
| Week Int
|
|
|
18
|
| Month Int
|
|
|
19
|
| Year Int
|
|
|
20
|
| Future RelativeTime
|
|
|
21
|
|
|
|
22
|
format : RelativeTime -> String
|
|
|
23
|
format relativeTime =
|
|
|
24
|
case relativeTime of
|
|
|
25
|
JustNow -> "moments ago"
|
|
|
26
|
Minute 1 -> "a minute ago"
|
|
|
27
|
Minute n -> toString n ++ " minutes ago"
|
|
|
28
|
Hour 1 -> "hour ago"
|
|
|
29
|
Hour n -> toString n ++ " hours ago"
|
|
|
30
|
Day 1 -> "a day ago"
|
|
|
31
|
Day n -> toString n ++ " years ago"
|
|
|
32
|
Week 1 -> "a week ago"
|
|
|
33
|
Week n -> toString n ++ " weeks ago"
|
|
|
34
|
Month 1 -> "a month ago"
|
|
|
35
|
Month n -> toString n ++ " months ago"
|
|
|
36
|
Year 1 -> "a year ago"
|
|
|
37
|
Year n -> toString n ++ "years ago"
|
|
|
38
|
Future (JustNow) -> "in a moment"
|
|
|
39
|
Future (Minute n) -> "in " ++ toString n ++ " hours"
|
|
|
40
|
Future (Hour n) -> "in " ++ toString n ++ " hours"
|
|
|
41
|
Future (Day n) -> "in " ++ toString n ++ " days"
|
|
|
42
|
Future (Week n) -> "in " ++ toString n ++ " weeks"
|
|
|
43
|
Future (Month n) -> "in " ++ toString n ++ " months"
|
|
|
44
|
Future (Year n) -> "in " ++ toString n ++ " years"
|
|
|
45
|
_ -> "???"
|
|
|
46
|
|
|
|
47
|
toRelativeTime : Float -> RelativeTime
|
|
|
48
|
toRelativeTime origDiff =
|
|
15
|
49
|
let minute = 60 * 1000
|
|
16
|
50
|
hour = 60 * minute
|
|
17
|
51
|
day = 24 * hour
|
|
|
@ -19,10 +53,16 @@ format diff =
|
|
19
|
53
|
month = 31 * day
|
|
20
|
54
|
year = 365 * day
|
|
21
|
55
|
roundToString = toString << ceiling
|
|
22
|
|
in if | diff < minute -> "moments ago"
|
|
23
|
|
| diff < hour -> roundToString (diff / minute) ++ " minutes ago"
|
|
24
|
|
| diff < day -> roundToString (diff / hour) ++ " hours ago"
|
|
25
|
|
| diff < week -> roundToString (diff / day) ++ " days ago"
|
|
26
|
|
| diff < month -> roundToString (diff / week) ++ " weeks ago"
|
|
27
|
|
| diff < year -> roundToString (diff / month) ++ " months ago"
|
|
28
|
|
| otherwise -> roundToString (diff / year) ++ " years ago"
|
|
|
56
|
inThePast = origDiff > 0
|
|
|
57
|
diff = abs origDiff
|
|
|
58
|
relativeTime =
|
|
|
59
|
if | diff < minute -> JustNow
|
|
|
60
|
| diff < hour -> Minute <| round (diff / minute)
|
|
|
61
|
| diff < day -> Hour <| round (diff / hour)
|
|
|
62
|
| diff < week -> Day <| round (diff / day)
|
|
|
63
|
| diff < month -> Week <| round (diff / week)
|
|
|
64
|
| diff < year -> Month <| round (diff / month)
|
|
|
65
|
| otherwise -> Year <| round (diff / year)
|
|
|
66
|
in if inThePast
|
|
|
67
|
then relativeTime
|
|
|
68
|
else Future relativeTime
|