Time

The Time registry provides tools to manage and manipulate dates, times, and time-related calculations, making it easy to handle time-based data in your projects.

You can easily import all the functions from the time registry by including the following import statement in your code

import "github.com/go-sprout/sprout/registry/time"

date

The function formats a given date or the current time into a specified format string.

Signature

 Date(fmt string, date any) (string, error)
{{ "2023-05-04T15:04:05Z" | date "Jan 2, 2006" }} // Output: "May 4, 2023"

dateInZone

The function formats a given date or the current time into a specified format string for a specified timezone.

Signature

DateInZone(fmt string, date any, zone string) (string, error)
{{ dateInZone "Jan 2, 2006", "2023-05-04T15:04:05Z", "UTC" }} // Output: "May 4, 2023"
{{ dateInZone "Jan 2, 2006", "2023-05-04T15:04:05Z", "invalid" }} // Error

duration

The function converts a given number of seconds into a human-readable duration string.

Signature

Duration(sec any) string
{{ 3661 | duration }} // Output: "1h1m1s"

dateAgo

The function calculates the time elapsed since a given date.

Signature

DateAgo(date any) string
{{ "2023-05-04T15:04:05Z" | dateAgo }} // Output: "4m"

dateAgo can receive multiples input types like:

  • time.Time object (object or pointer)

  • int, int32, int64 converted as Unix

now

The function returns the current time.

Signature

Now() time.Time
{{ now }} // Output: "2023-05-07T15:04:05Z"

unixEpoch

The function returns the Unix epoch timestamp for a given date.

Signature

UnixEpoch(date time.Time) string
{{ now | unixEpoch }} // Output: "1683306245"

dateModify

The function adjusts a given date by a specified duration, returning the modified date. If the duration format is incorrect, it returns the original date without any changes, in case of must version, an error are returned.

Signature

DateModify(fmt string, date time.Time) (time.Time, error)
{{ "2024-05-04T15:04:05Z" | dateModify "48h" }}
// Output: "2024-05-06T15:04:05Z", nil
{{ "2024-05-04T15:04:05Z" | dateModify "0z+" }}
// Output: "0000-00-00T00:00:00Z", error

durationRound

The function rounds a duration to the nearest significant time unit, such as years or seconds.

Signature

DurationRound(duration any) string
{{ "9600h" | durationRound }} // Output: "1y"
{{ "960h" | durationRound }} // Output: "1mo"
{{ "192h" | durationRound }} // Output: "8d"
{{ "3600s" | durationRound }} // Output: "1h"
{{ "300s" | durationRound }} // Output: "5m"
{{ "61s" | durationRound }} // Output: "1m"
{{ "59s" | durationRound }} // Output: "59s"

htmlDate

The function formats a date into the standard HTML date format (YYYY-MM-DD).

Signature

HtmlDate(date any) (string, error)
{{ "2023-05-04T15:04:05Z" | htmlDate }} // Output: "2023-05-04"

This basically call dateInZone("2006-01-02", date, "Local")

htmlDateInZone

The function formats a date into the standard HTML date format (YYYY-MM-DD) based on a specified timezone.

Signature

HtmlDateInZone(date any, zone string) (string, error)
{{ "2023-05-04T15:04:05Z", "UTC" | htmlDateInZone }} // Output: "2023-05-04"

This basically call dateInZone("2006-01-02", date, zone)

Last updated

Change request #24: reflect safe functions feature and new signatures