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 d’aujourd’hui à l’heure 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...) }