1
0
mirror of https://github.com/muety/wakapi.git synced 2023-08-10 21:12:56 +03:00

refactor: time zone sensitivity (resolve #184)

This commit is contained in:
Ferdinand Mütsch
2021-04-25 14:15:18 +02:00
parent 26ef93c1af
commit c142b525a4
15 changed files with 594 additions and 105 deletions

View File

@@ -16,51 +16,51 @@ func ParseInterval(interval string) (*models.IntervalKey, error) {
return nil, errors.New("not a valid interval")
}
func MustResolveIntervalRaw(interval string) (from, to time.Time) {
_, from, to = ResolveIntervalRaw(interval)
func MustResolveIntervalRawTZ(interval string, tz *time.Location) (from, to time.Time) {
_, from, to = ResolveIntervalRawTZ(interval, tz)
return from, to
}
func ResolveIntervalRaw(interval string) (err error, from, to time.Time) {
func ResolveIntervalRawTZ(interval string, tz *time.Location) (err error, from, to time.Time) {
parsed, err := ParseInterval(interval)
if err != nil {
return err, time.Time{}, time.Time{}
}
return ResolveInterval(parsed)
return ResolveIntervalTZ(parsed, tz)
}
func ResolveInterval(interval *models.IntervalKey) (err error, from, to time.Time) {
to = time.Now()
func ResolveIntervalTZ(interval *models.IntervalKey, tz *time.Location) (err error, from, to time.Time) {
to = time.Now().In(tz)
switch interval {
case models.IntervalToday:
from = StartOfToday()
from = StartOfToday(tz)
case models.IntervalYesterday:
from = StartOfToday().Add(-24 * time.Hour)
to = StartOfToday()
from = StartOfToday(tz).Add(-24 * time.Hour)
to = StartOfToday(tz)
case models.IntervalThisWeek:
from = StartOfWeek()
from = StartOfThisWeek(tz)
case models.IntervalLastWeek:
from = StartOfWeek().AddDate(0, 0, -7)
to = StartOfWeek()
from = StartOfThisWeek(tz).AddDate(0, 0, -7)
to = StartOfThisWeek(tz)
case models.IntervalThisMonth:
from = StartOfMonth()
from = StartOfThisMonth(tz)
case models.IntervalLastMonth:
from = StartOfMonth().AddDate(0, -1, 0)
to = StartOfMonth()
from = StartOfThisMonth(tz).AddDate(0, -1, 0)
to = StartOfThisMonth(tz)
case models.IntervalThisYear:
from = StartOfYear()
from = StartOfThisYear(tz)
case models.IntervalPast7Days:
from = StartOfToday().AddDate(0, 0, -7)
from = StartOfToday(tz).AddDate(0, 0, -7)
case models.IntervalPast7DaysYesterday:
from = StartOfToday().AddDate(0, 0, -1).AddDate(0, 0, -7)
to = StartOfToday().AddDate(0, 0, -1)
from = StartOfToday(tz).AddDate(0, 0, -1).AddDate(0, 0, -7)
to = StartOfToday(tz).AddDate(0, 0, -1)
case models.IntervalPast14Days:
from = StartOfToday().AddDate(0, 0, -14)
from = StartOfToday(tz).AddDate(0, 0, -14)
case models.IntervalPast30Days:
from = StartOfToday().AddDate(0, 0, -30)
from = StartOfToday(tz).AddDate(0, 0, -30)
case models.IntervalPast12Months:
from = StartOfToday().AddDate(0, -12, 0)
from = StartOfToday(tz).AddDate(0, -12, 0)
case models.IntervalAny:
from = time.Time{}
default:
@@ -78,24 +78,18 @@ func ParseSummaryParams(r *http.Request) (*models.SummaryParams, error) {
var from, to time.Time
if interval := params.Get("interval"); interval != "" {
err, from, to = ResolveIntervalRaw(interval)
err, from, to = ResolveIntervalRawTZ(interval, user.TZ())
} else if start := params.Get("start"); start != "" {
err, from, to = ResolveIntervalRaw(start)
err, from, to = ResolveIntervalRawTZ(start, user.TZ())
} else {
from, err = ParseDateTime(params.Get("from"))
from, err = ParseDateTimeTZ(params.Get("from"), user.TZ())
if err != nil {
from, err = ParseDate(params.Get("from"))
if err != nil {
return nil, errors.New("missing 'from' parameter")
}
return nil, errors.New("missing or invalid 'from' parameter")
}
to, err = ParseDateTime(params.Get("to"))
to, err = ParseDateTimeTZ(params.Get("to"), user.TZ())
if err != nil {
to, err = ParseDate(params.Get("to"))
if err != nil {
return nil, errors.New("missing 'to' parameter")
}
return nil, errors.New("missing or invalid 'to' parameter")
}
}