52 lines
1.5 KiB
Go
52 lines
1.5 KiB
Go
package wait
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// from monday to friday from 12:00 utc to 22:00 utc
|
|
// saturday from 12:00 utc to 18:00 utc
|
|
// sunday wont work
|
|
func WaitAmount(actualTime time.Time) (infoDuration time.Duration, longDuration time.Duration) {
|
|
var nextDayTime time.Time
|
|
|
|
// day of the week start on sunday=0
|
|
dayNumber := actualTime.UTC().Weekday()
|
|
year, month, day, hour := actualTime.UTC().Year(), actualTime.UTC().Month(), actualTime.UTC().Day(), actualTime.UTC().Hour()
|
|
nextDayTemplate := fmt.Sprintf("%d-%02d-%02d 12:05:00", year, month, day)
|
|
parsedDate, err := time.Parse(time.DateTime, nextDayTemplate)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
// in case of waiting to next day or weekend
|
|
switch dayNumber {
|
|
case 0:
|
|
nextDayTime = parsedDate.Add(24 * time.Hour)
|
|
return time.Until(nextDayTime), time.Until(nextDayTime)
|
|
case 6:
|
|
if hour > 16 {
|
|
nextDayTime = parsedDate.Add(48 * time.Hour)
|
|
return time.Until(nextDayTime), time.Until(nextDayTime)
|
|
} else {
|
|
info := time.Until(actualTime.UTC().Add(26 * time.Minute))
|
|
long := time.Until(actualTime.UTC().Add(59 * time.Minute))
|
|
return info, long
|
|
|
|
}
|
|
default:
|
|
nextDayTime = parsedDate.Add(24 * time.Hour)
|
|
switch {
|
|
case hour >= 22:
|
|
// next day wait
|
|
return time.Until(nextDayTime), time.Until(nextDayTime)
|
|
case hour < 12:
|
|
return time.Until(parsedDate), time.Until(parsedDate)
|
|
default:
|
|
info := time.Until(actualTime.UTC().Add(26 * time.Minute))
|
|
long := time.Until(actualTime.UTC().Add(59 * time.Minute))
|
|
return info, long
|
|
}
|
|
}
|
|
}
|