summaryrefslogtreecommitdiff
path: root/model/time.go
blob: 38b93499b661e48539fc7f004775789292d19c5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package model

import (
	sqldriver "database/sql/driver"
	"errors"
	"time"
)

type Time time.Time

func MakeTimeNow() Time {
	return Time(time.Now().UTC())
}

func (self Time) AsUTCString() string {
	return time.Time(self).Format(time.RFC3339)
}

func (self Time) Value() (sqldriver.Value, error) {
	return self.AsUTCString(), nil
}

func (self *Time) Scan(value any) error {
	if valueStr, ok := value.(string); ok {
		parsedTime, err := time.Parse(time.RFC3339, valueStr)
		if err == nil {
			*self = Time(parsedTime.UTC())
		}
		return err
	} else {
		return errors.New("Expected a string")
	}
}

func (from Time) Compare(to Time) int {
	return time.Time(from).Compare(time.Time(to))
}

func (self *Time) Add(duration time.Duration) {
	*self = Time(time.Time(*self).Add(duration))
}