github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/util/time.go (about)

     1  // Package util - Content managed by Project Forge, see [projectforge.md] for details.
     2  package util
     3  
     4  import (
     5  	"time"
     6  
     7  	"github.com/araddon/dateparse"
     8  	"github.com/dustin/go-humanize"
     9  	"github.com/pkg/errors"
    10  )
    11  
    12  func TimeTruncate(t *time.Time) *time.Time {
    13  	if t == nil {
    14  		return nil
    15  	}
    16  	ret := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
    17  	return &ret
    18  }
    19  
    20  func TimeCurrent() time.Time {
    21  	return time.Now()
    22  }
    23  
    24  func TimeCurrentP() *time.Time {
    25  	ret := TimeCurrent()
    26  	return &ret
    27  }
    28  
    29  func TimeToday() *time.Time {
    30  	return TimeTruncate(TimeCurrentP())
    31  }
    32  
    33  func TimeCurrentUnix() int64 {
    34  	return TimeCurrent().Unix()
    35  }
    36  
    37  func TimeCurrentMillis() int64 {
    38  	return TimeCurrent().UnixMilli()
    39  }
    40  
    41  func TimeCurrentNanos() int64 {
    42  	return TimeCurrent().UnixNano()
    43  }
    44  
    45  func TimeRelative(t *time.Time) string {
    46  	if t == nil {
    47  		return "<never>"
    48  	}
    49  	return humanize.Time(*t)
    50  }
    51  
    52  func TimeToMap(t time.Time) map[string]any {
    53  	return map[string]any{"epoch": t.UnixMilli(), "iso8601": t.Format("2006-01-02T15:04:05-0700")}
    54  }
    55  
    56  func TimeToString(d *time.Time, fmt string) string {
    57  	if d == nil {
    58  		return ""
    59  	}
    60  	return d.Format(fmt)
    61  }
    62  
    63  func TimeFromString(s string) (*time.Time, error) {
    64  	if s == "" {
    65  		return nil, nil
    66  	}
    67  	ret, err := dateparse.ParseLocal(s)
    68  	if err != nil {
    69  		return nil, errors.New("invalid date string [" + s + "]")
    70  	}
    71  	return &ret, nil
    72  }
    73  
    74  func TimeFromStringSimple(s string) *time.Time {
    75  	ret, _ := TimeFromString(s)
    76  	return ret
    77  }
    78  
    79  func TimeFromStringFmt(s string, fmt string) (*time.Time, error) {
    80  	if s == "" {
    81  		return nil, nil
    82  	}
    83  	ret, err := time.Parse(fmt, s)
    84  	if err != nil {
    85  		return nil, errors.New("invalid date string [" + s + "], expected [" + fmt + "]")
    86  	}
    87  	return &ret, nil
    88  }