Documentation ¶
Overview ¶
Package timex provides an enhanced time.Time implementation. Add more commonly used functional methods.
such as: DayStart(), DayAfter(), DayAgo(), DateFormat() and more.
Index ¶
- Constants
- Variables
- func AddDay(t time.Time, day int) time.Time
- func AddHour(t time.Time, hour int) time.Time
- func AddMinutes(t time.Time, minutes int) time.Time
- func AddSec(t time.Time, seconds int) time.Time
- func AddSeconds(t time.Time, seconds int) time.Time
- func Date(t time.Time, template ...string) string
- func DateFormat(t time.Time, template string) string
- func Datetime(t time.Time, template ...string) string
- func DayEnd(t time.Time) time.Time
- func DayStart(t time.Time) time.Time
- func Elapsed(start, end time.Time) string
- func ElapsedNow(start time.Time) string
- func Format(t time.Time) string
- func FormatBy(t time.Time, layout string) string
- func FormatByTpl(t time.Time, template string) string
- func FormatUnix(sec int64, layout ...string) string
- func FormatUnixBy(sec int64, layout string) string
- func FormatUnixByTpl(sec int64, template ...string) string
- func FromNow(t time.Time) string
- func FromNowWith(u time.Time, tms []TimeMessage) string
- func HourEnd(t time.Time) time.Time
- func HourStart(t time.Time) time.Time
- func HowLongAgo(diffSec int64) string
- func HowLongAgo2(diffSec int64, tms []TimeMessage) string
- func InRange(dst, start, end time.Time) bool
- func IsDuration(s string) bool
- func NowAddDay(day int) time.Time
- func NowAddHour(hour int) time.Time
- func NowAddMinutes(minutes int) time.Time
- func NowAddSec(seconds int) time.Time
- func NowAddSeconds(seconds int) time.Time
- func NowDate(template ...string) string
- func NowHourEnd() time.Time
- func NowHourStart() time.Time
- func NowUnix() int64
- func ParseRange(expr string, opt *ParseRangeOpt) (start, end time.Time, err error)
- func SetLocalByName(tzName string) error
- func ToDur(s string) (time.Duration, error)
- func ToDuration(s string) (time.Duration, error)
- func ToLayout(template string) string
- func ToTime(s string, layouts ...string) (time.Time, error)
- func TodayEnd() time.Time
- func TodayStart() time.Time
- func TryToTime(s string, bt time.Time) (time.Time, error)
- type ParseRangeOpt
- type Time
- func FromDate(s string, template ...string) (*Time, error)
- func FromString(s string, layouts ...string) (*Time, error)
- func FromTime(t time.Time) *Time
- func FromUnix(sec int64) *Time
- func Local() *Time
- func LocalByName(tzName string) *Time
- func New(t time.Time) *Time
- func Now() *Time
- func Wrap(t time.Time) *Time
- func (t *Time) AddDay(day int) *Time
- func (t *Time) AddDur(dur time.Duration) *Time
- func (t *Time) AddHour(hours int) *Time
- func (t *Time) AddMinutes(minutes int) *Time
- func (t *Time) AddSeconds(seconds int) *Time
- func (t *Time) AddString(dur string) *Time
- func (t *Time) CustomHMS(hour, min, sec int) *Time
- func (t *Time) DateFormat(template string) string
- func (t *Time) Datetime() string
- func (t *Time) DayAfter(day int) *Time
- func (t *Time) DayAgo(day int) *Time
- func (t *Time) DayEnd() *Time
- func (t *Time) DayStart() *Time
- func (t Time) Diff(u time.Time) time.Duration
- func (t Time) DiffSec(u time.Time) int
- func (t Time) DiffUnix(u int64) int
- func (t *Time) Format(layout string) string
- func (t *Time) HourEnd() *Time
- func (t *Time) HourStart() *Time
- func (t Time) HowLongAgo(before time.Time) string
- func (t *Time) IsAfter(u time.Time) bool
- func (t *Time) IsAfterUnix(ux int64) bool
- func (t *Time) IsBefore(u time.Time) bool
- func (t *Time) IsBeforeUnix(ux int64) bool
- func (t *Time) SubDay(day int) *Time
- func (t *Time) SubHour(hours int) *Time
- func (t *Time) SubMinutes(minutes int) *Time
- func (t *Time) SubSeconds(seconds int) *Time
- func (t Time) SubUnix(u time.Time) int
- func (t Time) T() time.Time
- func (t Time) Timestamp() int64
- func (t *Time) Tomorrow() *Time
- func (t *Time) TplFormat(template string) string
- func (t *Time) UnmarshalJSON(data []byte) error
- func (t *Time) UnmarshalText(data []byte) error
- func (t *Time) Yesterday() *Time
- type TimeMessage
- type TimeX
Constants ¶
const ( DatetimeLayout = "2006-01-02 15:04:05" LayoutWithMs3 = "2006-01-02 15:04:05.000" LayoutWithMs6 = "2006-01-02 15:04:05.000000" DateOnlyLayout = "2006-01-02" TimeOnlyLayout = "15:04:05" // ZeroUnix zero unix timestamp ZeroUnix int64 = -62135596800 )
some time layout or time
const ( DefaultTemplate = "Y-m-d H:I:S" // equals layout: "2006-01-02 15:04:05" TemplateWithMs3 = "Y-m-d H:I:S.v" // end with ".000" TemplateWithMs6 = "Y-m-d H:I:S.u" // end with ".000000" )
some common datetime templates
const ( OneSecond = 1 OneMinSec = 60 OneHourSec = 3600 OneDaySec = 86400 OneWeekSec = 7 * 86400 OneMonthSec = 30 * 86400 MinSec = OneMinSec HourSec = OneHourSec DaySec = OneDaySec WeekSec = OneWeekSec MonthSec = OneMonthSec Microsecond = time.Microsecond Millisecond = time.Millisecond Second = time.Second OneMin = time.Minute Minute = time.Minute OneHour = time.Hour Hour = time.Hour OneDay = 24 * time.Hour Day = OneDay OneWeek = 7 * 24 * time.Hour Week = OneWeek Month = 30 * 24 * time.Hour )
provide some commonly time constants
Variables ¶
var ( // DefaultLayout template for format time DefaultLayout = DatetimeLayout // ZeroTime zero time instance ZeroTime = time.Time{} )
var TimeMessages = []TimeMessage{ {"< 1 sec ago", []int{0}}, {"1 sec ago", []int{1}}, {"%d secs ago", []int{45, 1}}, {"1 min ago", []int{89}}, {"%d mins ago", []int{44 * 60, 60}}, {"1 hour ago", []int{89 * 60}}, {"%d hours ago", []int{21 * 3600, 3600}}, {"1 day ago", []int{35 * 3600}}, {"%d days ago", []int{30 * 86400, 86400}}, {"1 month ago", []int{45 * 86400}}, {"%d months ago", []int{319 * 86400, 2592000}}, {"1 year ago", []int{547 * 86400}}, {"%d years ago", []int{547 * 86400, 12 * 2592000}}, }
TimeMessages time message list.
NOTE: last item.Seconds[0] is min boundary value.
Functions ¶
func AddMinutes ¶
AddMinutes add some minutes time for given time
func AddSeconds ¶
AddSeconds add some seconds time for given time
func Date ¶ added in v0.5.1
Date format time by given date template. see ToLayout() for template parse.
func DateFormat ¶ added in v0.5.1
DateFormat format time by given date template. see ToLayout()
func Datetime ¶ added in v0.6.9
Datetime convert time to string use template. see ToLayout() for template parse.
func ElapsedNow ¶ added in v0.6.12
ElapsedNow calc elapsed time from start time to now.
func FormatByTpl ¶ added in v0.5.1
FormatByTpl format time by given date template. see ToLayout()
func FormatUnix ¶
FormatUnix time seconds use default layout
func FormatUnixBy ¶
FormatUnixBy format time seconds use given layout
func FormatUnixByTpl ¶ added in v0.5.1
FormatUnixByTpl format time seconds use given date template. see ToLayout()
func FromNow ¶ added in v0.6.11
FromNow format time from now, returns like: 1 hour ago, 2 days ago
refer: https://gist.github.com/davidrleonard/259fe449b1ec13bf7d87cde567ca0fde
func FromNowWith ¶ added in v0.6.11
func FromNowWith(u time.Time, tms []TimeMessage) string
FromNowWith format time from now with custom TimeMessage list
func HowLongAgo ¶ added in v0.5.1
HowLongAgo format diff time seconds to string. alias of HowLongAgo2()
func HowLongAgo2 ¶ added in v0.6.11
func HowLongAgo2(diffSec int64, tms []TimeMessage) string
HowLongAgo2 format diff time seconds with custom TimeMessage list
func InRange ¶ added in v0.6.9
InRange check the dst time is in the range of start and end.
if start is zero, only check dst < end, if end is zero, only check dst > start.
func IsDuration ¶ added in v0.6.9
IsDuration check the string is a valid duration string. alias of comfunc.IsDuration()
func NowAddMinutes ¶
NowAddMinutes add some minutes time from now
func NowAddSeconds ¶
NowAddSeconds add some seconds time from now
func NowDate ¶ added in v0.6.13
NowDate quick get current date string. if template is empty, will use DefaultTemplate.
func ParseRange ¶ added in v0.6.9
func ParseRange(expr string, opt *ParseRangeOpt) (start, end time.Time, err error)
ParseRange parse time range expression string to time.Time range.
- "0" will use opt.BaseTime.
Expression format:
"-5h~-1h" => 5 hours ago to 1 hour ago "1h~5h" => 1 hour after to 5 hours after "-1h~1h" => 1 hour ago to 1 hour after "-1h" => 1 hour ago to feature. eq "-1h~" "-1h~0" => 1 hour ago to now. "< -1h" OR "~-1h" => 1 hour ago. "> 1h" OR "1h" => 1 hour after to feature // keyword: now, today, yesterday, tomorrow "today" => today start to today end "yesterday" => yesterday start to yesterday end "tomorrow" => tomorrow start to tomorrow end
Usage:
start, end, err := ParseRange("-1h~1h", nil) if err != nil { log.Fatal(err) } fmt.Println(start, end)
func SetLocalByName ¶
SetLocalByName set local by tz name. eg: UTC, PRC
func ToDuration ¶ added in v0.5.6
ToDuration parses a duration string. such as "300ms", "-1.5h" or "2h45m". Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
func ToLayout ¶ added in v0.5.1
ToLayout convert chars date template to Go date layout.
template chars see timex.charMap
Types ¶
type ParseRangeOpt ¶ added in v0.6.9
type ParseRangeOpt struct { // BaseTime is the base time for relative time string. // if is zero, use time.Now() as base time. BaseTime time.Time // OneAsEnd is the option for one time range. // - False: "-1h" => "-1h,0"; "1h" => "+1h, feature" // - True: "-1h" => "zero,-1h"; "1h" => "zero,1h" OneAsEnd bool // AutoSort is the option for sort the time range. AutoSort bool // SepChar is the separator char for time range string. default is '~' SepChar byte // BeforeFn hook for before parse time string. BeforeFn func(string) string // KeywordFn is the function for parse keyword time string. KeywordFn func(string) (time.Time, time.Time, error) }
ParseRangeOpt is the option for ParseRange
type Time ¶ added in v0.5.13
type Time struct { time.Time // Layout set the default date format layout. default use DefaultLayout Layout string }
Time an enhanced time.Time implementation.
func FromString ¶ added in v0.5.1
FromString create from datetime string. see strutil.ToTime()
func (*Time) AddMinutes ¶ added in v0.5.13
AddMinutes add some minutes time for the time
func (*Time) AddSeconds ¶ added in v0.5.13
AddSeconds add some seconds time the time
func (*Time) AddString ¶ added in v0.6.9
AddString add duration time string.
Example:
tn := timex.Now() // example as "2019-01-01 12:12:12" nt := tn.AddString("1h") nt.Datetime() // Output: 2019-01-01 13:12:12
func (*Time) CustomHMS ¶ added in v0.5.13
CustomHMS custom change the hour, minute, second for create new time.
func (*Time) DateFormat ¶ added in v0.5.13
DateFormat use input template format time to date.
Example:
tn := timex.Now() tn.DateFormat("Y-m-d H:i:s") // Output: 2019-01-01 12:12:12 tn.DateFormat("Y-m-d H:i") // Output: 2019-01-01 12:12 tn.DateFormat("Y-m-d") // Output: 2019-01-01 tn.DateFormat("Y-m") // Output: 2019-01 tn.DateFormat("y-m-d") // Output: 19-01-01 tn.DateFormat("ymd") // Output: 190101
see ToLayout() for convert template to layout.
func (*Time) Datetime ¶ added in v0.5.13
Datetime use DefaultLayout format time to date. see Format()
func (*Time) DayAfter ¶ added in v0.5.13
DayAfter get some day after time for the time. alias of Time.AddDay()
func (*Time) Format ¶ added in v0.5.13
Format returns a textual representation of the time value formatted according to the layout defined by the argument.
see time.Time.Format()
func (Time) HowLongAgo ¶ added in v0.5.13
HowLongAgo format diff time to string.
func (*Time) IsAfterUnix ¶ added in v0.5.13
IsAfterUnix the given unix timestamp
func (*Time) IsBeforeUnix ¶ added in v0.5.13
IsBeforeUnix the given unix timestamp
func (*Time) SubMinutes ¶ added in v0.5.13
SubMinutes minus some minutes time for the time
func (*Time) SubSeconds ¶ added in v0.5.13
SubSeconds minus some seconds time the time
func (*Time) TplFormat ¶ added in v0.5.13
TplFormat use input template format time to date.
alias of DateFormat()
func (*Time) UnmarshalJSON ¶ added in v0.5.13
UnmarshalJSON implements the json.Unmarshaler interface.
Tip: will auto match a format by strutil.ToTime()
func (*Time) UnmarshalText ¶ added in v0.5.13
UnmarshalText implements the encoding.TextUnmarshaler interface.
Tip: will auto match a format by strutil.ToTime()
type TimeMessage ¶ added in v0.6.11
type TimeMessage struct { // Message string or format string Message string // Seconds time range. // first elem is max boundary value, second elem is divisor(unit). Seconds []int }
TimeMessage struct for HowLongAgo2(), FromNowWith()