A Go package to work with civil date-only values (year, month, day without a time zone).
go get github.com/perron2/go-dateRequires Go 1.25+.
package main
import (
"encoding/json"
"fmt"
"github.com/perron2/go-date"
"time"
)
func main() {
today := date.Today()
earlier := date.New(2024, time.August, 1)
days := today.DaysSince(earlier)
fmt.Printf("%d days since %s\n", days, today)
twoYearsLater := today.AddYears(2)
if today.Before(twoYearsLater) {
fmt.Println("today is before twoYearsLater")
}
if twoYearsLater.After(today) {
fmt.Println("twoYearsLater is after today")
}
jsonStruct := struct {
Start date.Date `json:"start"`
End date.Date `json:"end"`
}{date.MustParse("2025-08-01"), date.MustParse("2025-09-30")}
jsonData, _ := json.Marshal(jsonStruct)
fmt.Println(string(jsonData))
}