summaryrefslogtreecommitdiff
path: root/utils/format/date.go
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-12-24 13:50:07 +0530
committerBobby <[email protected]>2025-12-24 13:50:07 +0530
commitb77d75f05fb2059389c05f6c01484e0cd12e796e (patch)
treee3c5521bf9ed3fcffd59960053d651091496a7ea /utils/format/date.go
parent81ab367f440d6f85297b2013d0c1aa57fda7e9cd (diff)
downloadlain-b77d75f05fb2059389c05f6c01484e0cd12e796e.tar.xz
lain-b77d75f05fb2059389c05f6c01484e0cd12e796e.zip
feat: introduce email folder synchronization and management, refactor email services, and update UI styles
Diffstat (limited to 'utils/format/date.go')
-rw-r--r--utils/format/date.go99
1 files changed, 99 insertions, 0 deletions
diff --git a/utils/format/date.go b/utils/format/date.go
new file mode 100644
index 0000000..8ef95cb
--- /dev/null
+++ b/utils/format/date.go
@@ -0,0 +1,99 @@
+package format
+
+import (
+ "html"
+ "lain/types"
+ "time"
+)
+
+func FormatEmailDate(date time.Time, dateFormat types.DateFormat, timeFormat types.TimeFormat, prettyDates bool, timezone string) string {
+ loc, err := time.LoadLocation(timezone)
+ if err != nil {
+ loc = time.UTC
+ }
+
+ date = date.In(loc)
+ now := time.Now().In(loc)
+
+ if prettyDates {
+ return formatPrettyDate(date, now, timeFormat)
+ }
+
+ return formatFullDate(date, dateFormat, timeFormat)
+}
+
+func formatPrettyDate(date, now time.Time, timeFormat types.TimeFormat) string {
+ diff := now.Sub(date)
+
+ // Today - show time only
+ if date.Year() == now.Year() && date.YearDay() == now.YearDay() {
+ return formatTime(date, timeFormat)
+ }
+
+ // Yesterday
+ yesterday := now.AddDate(0, 0, -1)
+ if date.Year() == yesterday.Year() && date.YearDay() == yesterday.YearDay() {
+ return "Yesterday"
+ }
+
+ // This week - show day name and time
+ if diff.Hours() < 168 { // 7 days
+ dayName := date.Format("Mon")
+ timeStr := formatTime(date, timeFormat)
+ return dayName + " " + timeStr
+ }
+
+ // This year - show month and day
+ if date.Year() == now.Year() {
+ return date.Format("Jan 2")
+ }
+
+ // Older - show full date
+ return date.Format("Jan 2, 2006")
+}
+
+func formatFullDate(date time.Time, dateFormat types.DateFormat, timeFormat types.TimeFormat) string {
+ dateStr := formatDate(date, dateFormat)
+ timeStr := formatTime(date, timeFormat)
+ return dateStr + " " + timeStr
+}
+
+func formatDate(date time.Time, dateFormat types.DateFormat) string {
+ switch dateFormat {
+ case types.YearMonthDayDashed:
+ return date.Format("2006-01-02")
+ case types.YearMonthDaySlashed:
+ return date.Format("2006/01/02")
+ case types.YearMonthDayDotted:
+ return date.Format("2006.01.02")
+ case types.DayMonthYearDashed:
+ return date.Format("02-01-2006")
+ case types.DayMonthYearSlashed:
+ return date.Format("02/01/2006")
+ case types.DayMonthYearDotted:
+ return date.Format("02.01.2006")
+ case types.DayMonthYearDottedShort:
+ return date.Format("2.1.06")
+ default:
+ return date.Format("2006-01-02")
+ }
+}
+
+func formatTime(date time.Time, timeFormat types.TimeFormat) string {
+ switch timeFormat {
+ case types.ShortHoursAndMinutes24Hours:
+ return date.Format("15:4")
+ case types.FullHoursAndMinutes24Hours:
+ return date.Format("15:04")
+ case types.ShortHoursAndMinutes12Hours:
+ return date.Format("3:4 PM")
+ case types.FullHoursAndMinutes12Hours:
+ return date.Format("03:04 PM")
+ default:
+ return date.Format("15:04")
+ }
+}
+
+func DecodeHTML(text string) string {
+ return html.UnescapeString(text)
+}