mattermost-community-enterp.../vendor/github.com/reflog/dateconstraints/README.md
Claude ec1f89217a Merge: Complete Mattermost Server with Community Enterprise
Full Mattermost server source with integrated Community Enterprise features.
Includes vendor directory for offline/air-gapped builds.

Structure:
- enterprise-impl/: Enterprise feature implementations
- enterprise-community/: Init files that register implementations
- enterprise/: Bridge imports (community_imports.go)
- vendor/: All dependencies for offline builds

Build (online):
  go build ./cmd/mattermost

Build (offline/air-gapped):
  go build -mod=vendor ./cmd/mattermost

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 23:59:07 +09:00

85 lines
2.3 KiB
Markdown

# Date Constraints
### Validate a date against constraints
## Overview [![GoDoc](https://godoc.org/github.com/reflog/dateconstraints?status.svg)](https://godoc.org/github.com/reflog/dateconstraints)
This module is heavily based on https://github.com/Masterminds/semver so kudos to [Masterminds](https://github.com/Masterminds/semver).
> _For now only RFC3339 dates are supported_
## Basic Comparisons
There are two elements to the comparisons. First, a comparison string is a list
of space or comma separated AND comparisons. These are then separated by || (OR)
comparisons. For example, `">= 2020-03-01T00:00:00Z < 2020-04-01T00:00:00Z || >= 2020-05-01T00:00:00Z"` is will validate if a date is between 01/03/2020 till 01/04/2020 OR it's after 01/05/2020.
The basic comparisons are:
- `=`: equal
- `!=`: not equal
- `>`: greater than
- `<`: less than
- `>=`: greater than or equal to
- `<=`: less than or equal to
## Usage
```go
import "github.com/reflog/dateconstraints"
import "time"
func main(){
date, _ := time.Parse(time.RFC3339, "2020-03-10T00:00:00Z")
c, _ := date_constraints.NewConstraint("> 2020-03-01T00:00:00Z <= 2020-04-01T00:00:00Z")
if c.Check(&date) {
// date is in range!
}
}
```
## Validation
In addition to testing a date against a constraint, it can be validated
against a constraint. When validation fails a slice of errors containing why a
date didn't meet the constraint is returned. For example,
```go
c, err := date_constraints.NewConstraint("<= 2020-03-01T00:00:00Z, >= 2020-04-10T00:00:00Z")
if err != nil {
// Handle constraint not being parseable.
}
v, err := time.Parse(time.RFC3339, "2020-03-10T00:00:00Z")
if err != nil {
// Handle date not being parseable.
}
// Validate a date against a constraint.
a, msgs := c.Validate(&v)
// a is false
for _, m := range msgs {
fmt.Println(m)
// Loops over the errors which would read
// "2020-03-10T00:00:00Z is greater than 2020-03-01T00:00:00Z"
// "2020-03-01T00:00:00Z is less than 2020-04-01T00:00:00Z"
}
```
## Install
```
go get github.com/reflog/dateconstraints
```
## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
## License
[MIT](https://choosealicense.com/licenses/mit/)