diff --git a/templates/profile.gohtml b/templates/profile.gohtml index f259ec5..58bdad2 100644 --- a/templates/profile.gohtml +++ b/templates/profile.gohtml @@ -26,7 +26,7 @@ {{index $artists $index}} {{$title}} - {{formatTimestamp (index $times $index)}} + {{formatTimestamp (index $times $index)}} {{end}} diff --git a/web/profile.go b/web/profile.go index f4363ab..6d7631c 100644 --- a/web/profile.go +++ b/web/profile.go @@ -7,6 +7,7 @@ import ( "net/http" "os" "strconv" + "time" "muzi/db" @@ -23,7 +24,7 @@ type ProfileData struct { ArtistCount int Artists []string Titles []string - Times []string + Times []time.Time Page int Title string LoggedInUsername string @@ -103,7 +104,7 @@ func profilePageHandler() http.HandlerFunc { } profileData.Artists = append(profileData.Artists, artist) profileData.Titles = append(profileData.Titles, title) - profileData.Times = append(profileData.Times, time.Time.String()) + profileData.Times = append(profileData.Times, time.Time) } err = templates.ExecuteTemplate(w, "base", profileData) diff --git a/web/utils.go b/web/utils.go index 31070db..004751a 100644 --- a/web/utils.go +++ b/web/utils.go @@ -4,6 +4,7 @@ package web import ( "fmt" + "time" ) // Subtracts two integers @@ -24,3 +25,34 @@ func formatInt(n int) string { return formatInt(n/1000) + "," + fmt.Sprintf("%03d", n%1000) } } + +// Formats timestamps compared to local time +func formatTimestamp(timestamp time.Time) string { + now := time.Now() + duration := now.Sub(timestamp) + + if duration < 24*time.Hour { + seconds := int(duration.Seconds()) + if seconds < 60 { + return fmt.Sprintf("%d seconds ago", seconds) + } + minutes := seconds / 60 + if minutes < 60 { + return fmt.Sprintf("%d minutes ago", minutes) + } + hours := minutes / 60 + return fmt.Sprintf("%d hours ago", hours) + } + + year := now.Year() + if timestamp.Year() == year { + return timestamp.Format("2 Jan 3:04pm") + } + + return timestamp.Format("2 Jan 2006 3:04pm") +} + +// Full timestamp format for browser hover +func formatTimestampFull(timestamp time.Time) string { + return timestamp.Format("Monday 2 Jan 2006, 3:04pm") +} diff --git a/web/web.go b/web/web.go index f61657b..7db35ce 100644 --- a/web/web.go +++ b/web/web.go @@ -24,9 +24,11 @@ var templates *template.Template // Declares all functions for the HTML templates and parses them func init() { funcMap := template.FuncMap{ - "sub": sub, - "add": add, - "formatInt": formatInt, + "sub": sub, + "add": add, + "formatInt": formatInt, + "formatTimestamp": formatTimestamp, + "formatTimestampFull": formatTimestampFull, } templates = template.Must(template.New("").Funcs(funcMap).ParseGlob("./templates/*.gohtml")) }