gob/datetime/create.go

102 lines
2.5 KiB
Go
Raw Normal View History

2023-10-31 10:18:00 +00:00
package datetime
import (
"fmt"
"time"
. "gitea.zaclys.com/bvaudour/gob/option"
)
// Zero retourne la date correspondant au 01/01/0001 00:00:00 UTC.
// Si tz est fourni, la date est dans le fuseau horaire demandé,
// sinon, dans le fuseau horaire par défaut.
func Zero(tz ...string) Result[time.Time] {
var t time.Time
return toTZ(t, tz...)
}
// Now retourne la date actuelle.
func Now(tz ...string) Result[time.Time] {
t := time.Now()
return toTZ(t, tz...)
}
// Tomorrow retourne la date dans 24h.
func Tomorrow(tz ...string) Result[time.Time] {
now := Now(tz...)
if t, ok := now.Ok(); ok {
return Ok(AddDays(t, 1))
}
return now
}
// Yesterday retourne la date il y a 24h.
func Yesterday(tz ...string) Result[time.Time] {
now := Now(tz...)
if t, ok := now.Ok(); ok {
return Ok(AddDays(t, -1))
}
return now
}
// FromTimestamp convertit un timestamp (exprimé en secondes) en date.
func FromTimestamp(timestamp int64, tz ...string) Result[time.Time] {
t := time.Unix(timestamp, 0)
return toTZ(t, tz...)
}
// FromTimestampMilli convertit un timestamp (exprimé en ms) en date.
func FromTimestampMilli(timestamp int64, tz ...string) Result[time.Time] {
t := time.Unix(timestamp/1e3, (timestamp%1e3)*1e6)
return toTZ(t, tz...)
}
// FromTimestampMicro convertit un timestamp (exprimé en μs) en date.
func FromTimestampMicro(timestamp int64, tz ...string) Result[time.Time] {
t := time.Unix(timestamp/1e6, (timestamp%1e6)*1e3)
return toTZ(t, tz...)
}
// FromTimestampNano convertit un timestamp (exprimé en ns) en date.
func FromTimestampNano(timestamp int64, tz ...string) Result[time.Time] {
t := time.Unix(timestamp/1e9, timestamp%1e9)
return toTZ(t, tz...)
}
// FromDateTime retourne la date à partir des données numériques complètes.
func FromDateTime(year, month, day, hour, minute, second int, tz ...string) Result[time.Time] {
location, ok := getTZ(tz...).Get()
if !ok {
return Err[time.Time](fmt.Errorf(errInvalidTZ, tz))
}
t := time.Date(year, time.Month(month-1), day, hour, minute, second, 0, location)
return Ok(t)
}
// FromDate retourne le début du jour à partir des données de dates.
func FromDate(year, month, day int, tz ...string) Result[time.Time] {
return FromDateTime(year, month, day, 0, 0, 0)
}
// FromTime retourne la date daujourdhui à lheure indiquée.
func FromTime(hour, minute, second int, tz ...string) Result[time.Time] {
now := Now(tz...)
if !now.IsOk() {
return now
}
n, _ := now.Ok()
year, month, day := n.Date()
return FromDateTime(year, int(month+1), day, hour, minute, second, tz...)
}