2017-03-31 18:01:58 +02:00
|
|
|
package sprig
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Given a format and a date, format the date string.
|
|
|
|
//
|
|
|
|
// Date can be a `time.Time` or an `int, int32, int64`.
|
|
|
|
// In the later case, it is treated as seconds since UNIX
|
|
|
|
// epoch.
|
|
|
|
func date(fmt string, date interface{}) string {
|
|
|
|
return dateInZone(fmt, date, "Local")
|
|
|
|
}
|
|
|
|
|
|
|
|
func htmlDate(date interface{}) string {
|
|
|
|
return dateInZone("2006-01-02", date, "Local")
|
|
|
|
}
|
|
|
|
|
|
|
|
func htmlDateInZone(date interface{}, zone string) string {
|
|
|
|
return dateInZone("2006-01-02", date, zone)
|
|
|
|
}
|
|
|
|
|
|
|
|
func dateInZone(fmt string, date interface{}, zone string) string {
|
|
|
|
var t time.Time
|
|
|
|
switch date := date.(type) {
|
|
|
|
default:
|
|
|
|
t = time.Now()
|
|
|
|
case time.Time:
|
|
|
|
t = date
|
|
|
|
case int64:
|
|
|
|
t = time.Unix(date, 0)
|
|
|
|
case int:
|
|
|
|
t = time.Unix(int64(date), 0)
|
|
|
|
case int32:
|
|
|
|
t = time.Unix(int64(date), 0)
|
|
|
|
}
|
|
|
|
|
|
|
|
loc, err := time.LoadLocation(zone)
|
|
|
|
if err != nil {
|
|
|
|
loc, _ = time.LoadLocation("UTC")
|
|
|
|
}
|
|
|
|
|
|
|
|
return t.In(loc).Format(fmt)
|
|
|
|
}
|
|
|
|
|
|
|
|
func dateModify(fmt string, date time.Time) time.Time {
|
|
|
|
d, err := time.ParseDuration(fmt)
|
|
|
|
if err != nil {
|
|
|
|
return date
|
|
|
|
}
|
|
|
|
return date.Add(d)
|
|
|
|
}
|
2017-12-19 14:00:29 +01:00
|
|
|
|
|
|
|
func dateAgo(date interface{}) string {
|
|
|
|
var t time.Time
|
|
|
|
|
|
|
|
switch date := date.(type) {
|
|
|
|
default:
|
|
|
|
t = time.Now()
|
|
|
|
case time.Time:
|
|
|
|
t = date
|
|
|
|
case int64:
|
|
|
|
t = time.Unix(date, 0)
|
|
|
|
case int:
|
|
|
|
t = time.Unix(int64(date), 0)
|
|
|
|
}
|
|
|
|
// Drop resolution to seconds
|
|
|
|
duration := time.Since(t) / time.Second * time.Second
|
|
|
|
return duration.String()
|
|
|
|
}
|
|
|
|
|
|
|
|
func toDate(fmt, str string) time.Time {
|
|
|
|
t, _ := time.ParseInLocation(fmt, str, time.Local)
|
|
|
|
return t
|
|
|
|
}
|