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  }