Browse Source

make the dates prettier

(wrote this module in the last few hours, only adding it now.)
Lucas Stadler 11 years ago
parent
commit
44a7c08280
2 changed files with 32 additions and 2 deletions
  1. 28 0
      elm/PrettyDate.elm
  2. 4 2
      elm/Stream.elm

+ 28 - 0
elm/PrettyDate.elm

1
module PrettyDate (prettyDate) where
2
3
import Date
4
import Date (Date)
5
6
prettyDate : Date -> Date -> String
7
prettyDate reference date =
8
    let referenceSeconds = Date.toTime reference
9
        dateSeconds = Date.toTime date
10
        diffSeconds = referenceSeconds - dateSeconds
11
    in format diffSeconds
12
13
format : Float -> String
14
format diff =
15
    let minute = 60 * 1000
16
        hour = 60 * minute
17
        day = 24 * hour
18
        week = 7 * day
19
        month = 31 * day
20
        year = 365 * day
21
        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"

+ 4 - 2
elm/Stream.elm

7
import Html.Attributes as Attr
7
import Html.Attributes as Attr
8
import List
8
import List
9
import String
9
import String
10
import PrettyDate (prettyDate)
10
11
11
type alias Post = { title:String, content:String, created:Date }
12
type alias Post = { title:String, content:String, created:Date }
12
13
25
referenceDate = date "2015-03-01T14:09"
26
referenceDate = date "2015-03-01T14:09"
26
27
27
viewDate : Date -> Html
28
viewDate : Date -> Html
28
viewDate d = let isoDate = formatDate "%Y-%m-%dT%H:%M:%SZ" d
29
             in time [Attr.title isoDate, Attr.datetime isoDate] [(text isoDate)]
29
viewDate d = let dateString = prettyDate referenceDate d
30
                 isoDate = formatDate "%Y-%m-%dT%H:%M:%SZ" d
31
             in time [Attr.title isoDate, Attr.datetime isoDate] [(text dateString)]
30
32
31
viewPost : Post -> Html
33
viewPost : Post -> Html
32
viewPost post = div [] [
34
viewPost post = div [] [