code.gitea.io/gitea@v1.22.3/modules/timeutil/timestamp.go (about) 1 // Copyright 2017 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package timeutil 5 6 import ( 7 "time" 8 9 "code.gitea.io/gitea/modules/setting" 10 ) 11 12 // TimeStamp defines a timestamp 13 type TimeStamp int64 14 15 var ( 16 // mockNow is NOT concurrency-safe!! 17 mockNow time.Time 18 19 // Used for IsZero, to check if timestamp is the zero time instant. 20 timeZeroUnix = time.Time{}.Unix() 21 ) 22 23 // MockSet sets the time to a mocked time.Time 24 func MockSet(now time.Time) func() { 25 mockNow = now 26 return MockUnset 27 } 28 29 // MockUnset will unset the mocked time.Time 30 func MockUnset() { 31 mockNow = time.Time{} 32 } 33 34 // TimeStampNow returns now int64 35 func TimeStampNow() TimeStamp { 36 if !mockNow.IsZero() { 37 return TimeStamp(mockNow.Unix()) 38 } 39 return TimeStamp(time.Now().Unix()) 40 } 41 42 // Add adds seconds and return sum 43 func (ts TimeStamp) Add(seconds int64) TimeStamp { 44 return ts + TimeStamp(seconds) 45 } 46 47 // AddDuration adds time.Duration and return sum 48 func (ts TimeStamp) AddDuration(interval time.Duration) TimeStamp { 49 return ts + TimeStamp(interval/time.Second) 50 } 51 52 // Year returns the time's year 53 func (ts TimeStamp) Year() int { 54 return ts.AsTime().Year() 55 } 56 57 // AsTime convert timestamp as time.Time in Local locale 58 func (ts TimeStamp) AsTime() (tm time.Time) { 59 return ts.AsTimeInLocation(setting.DefaultUILocation) 60 } 61 62 // AsLocalTime convert timestamp as time.Time in local location 63 func (ts TimeStamp) AsLocalTime() time.Time { 64 return time.Unix(int64(ts), 0) 65 } 66 67 // AsTimeInLocation convert timestamp as time.Time in Local locale 68 func (ts TimeStamp) AsTimeInLocation(loc *time.Location) time.Time { 69 return time.Unix(int64(ts), 0).In(loc) 70 } 71 72 // AsTimePtr convert timestamp as *time.Time in Local locale 73 func (ts TimeStamp) AsTimePtr() *time.Time { 74 return ts.AsTimePtrInLocation(setting.DefaultUILocation) 75 } 76 77 // AsTimePtrInLocation convert timestamp as *time.Time in customize location 78 func (ts TimeStamp) AsTimePtrInLocation(loc *time.Location) *time.Time { 79 tm := time.Unix(int64(ts), 0).In(loc) 80 return &tm 81 } 82 83 // Format formats timestamp as given format 84 func (ts TimeStamp) Format(f string) string { 85 return ts.FormatInLocation(f, setting.DefaultUILocation) 86 } 87 88 // FormatInLocation formats timestamp as given format with spiecific location 89 func (ts TimeStamp) FormatInLocation(f string, loc *time.Location) string { 90 return ts.AsTimeInLocation(loc).Format(f) 91 } 92 93 // FormatDate formats a date in YYYY-MM-DD 94 func (ts TimeStamp) FormatDate() string { 95 return ts.Format("2006-01-02") 96 } 97 98 // IsZero is zero time 99 func (ts TimeStamp) IsZero() bool { 100 return int64(ts) == 0 || int64(ts) == timeZeroUnix 101 }