1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package sprig
- import (
- "strconv"
- "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 *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)
- }
- 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).Round(time.Second)
- return duration.String()
- }
- func toDate(fmt, str string) time.Time {
- t, _ := time.ParseInLocation(fmt, str, time.Local)
- return t
- }
- func unixEpoch(date time.Time) string {
- return strconv.FormatInt(date.Unix(), 10)
- }
|