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"))
}