Putting relative times in Context if wanted

Putting relative times in Context if wanted
This commit is contained in:
Martin (Schretzi) Fuchsluger
2025-02-14 06:53:51 +01:00
parent 99ae174876
commit b74af5cb55
3 changed files with 23 additions and 11 deletions
+6 -6
View File
@@ -37,12 +37,12 @@ func NewEntry(
newEntry.Task = task
newEntry.User = user
_, err = newEntry.SetBeginFromString(begin)
_, err = newEntry.SetBeginFromString(begin, time.Time{})
if err != nil {
return Entry{}, err
}
_, err = newEntry.SetFinishFromString(finish)
_, err = newEntry.SetFinishFromString(finish, time.Time{})
if err != nil {
return Entry{}, err
}
@@ -65,14 +65,14 @@ func (entry *Entry) SetIDFromDatabaseKey(key string) (error) {
return nil
}
func (entry *Entry) SetBeginFromString(begin string) (time.Time, error) {
func (entry *Entry) SetBeginFromString(begin string, contextTime time.Time) (time.Time, error) {
var beginTime time.Time
var err error
if begin == "" {
beginTime = time.Now()
} else {
beginTime, err = ParseTime(begin)
beginTime, err = ParseTime(begin, contextTime)
if err != nil {
return beginTime, err
}
@@ -82,12 +82,12 @@ func (entry *Entry) SetBeginFromString(begin string) (time.Time, error) {
return beginTime, nil
}
func (entry *Entry) SetFinishFromString(finish string) (time.Time, error) {
func (entry *Entry) SetFinishFromString(finish string, contextTime time.Time) (time.Time, error) {
var finishTime time.Time
var err error
if finish != "" {
finishTime, err = ParseTime(finish)
finishTime, err = ParseTime(finish, contextTime)
if err != nil {
return finishTime, err
}
+2 -2
View File
@@ -25,7 +25,7 @@ var entryCmd = &cobra.Command{
if begin != "" || finish != "" || project != "" || notes != "" || task != "" {
if begin != "" {
entry.Begin, err = entry.SetBeginFromString(begin)
entry.Begin, err = entry.SetBeginFromString(begin, entry.Begin)
if err != nil {
fmt.Printf("%s %+v\n", CharError, err)
os.Exit(1)
@@ -33,7 +33,7 @@ var entryCmd = &cobra.Command{
}
if finish != "" {
entry.Finish, err = entry.SetFinishFromString(finish)
entry.Finish, err = entry.SetFinishFromString(finish, entry.Finish)
if err != nil {
fmt.Printf("%s %+v\n", CharError, err)
os.Exit(1)
+15 -3
View File
@@ -12,6 +12,7 @@ import (
"errors"
"github.com/araddon/dateparse"
"github.com/spf13/viper"
)
@@ -59,7 +60,7 @@ func GetTimeFormat(timeStr string) (int) {
}
// TODO: Use https://golang.org/pkg/time/#ParseDuration
func RelToTime(timeStr string, ftId int) (time.Time, error) {
func RelToTime(timeStr string, ftId int, contextTime time.Time) (time.Time, error) {
var re = regexp.MustCompile(TimeFormats()[ftId])
gm := re.FindStringSubmatch(timeStr)
@@ -80,6 +81,17 @@ func RelToTime(timeStr string, ftId int) (time.Time, error) {
var t time.Time
if viper.IsSet("time.relative") && viper.GetString("time.relative") == "context" && !contextTime.IsZero() {
switch gm[1] {
case "+":
t = contextTime.Add(time.Hour * time.Duration(hours) + time.Minute * time.Duration(minutes))
case "-":
t = contextTime.Add((time.Hour * time.Duration(hours) + time.Minute * time.Duration(minutes)) * -1)
}
return t, nil
}
switch gm[1] {
case "+":
t = time.Now().Local().Add(time.Hour * time.Duration(hours) + time.Minute * time.Duration(minutes))
@@ -90,7 +102,7 @@ func RelToTime(timeStr string, ftId int) (time.Time, error) {
return t, nil
}
func ParseTime(timeStr string) (time.Time, error) {
func ParseTime(timeStr string, contextTime time.Time) (time.Time, error) {
tfId := GetTimeFormat(timeStr)
t:= time.Now()
@@ -105,7 +117,7 @@ func ParseTime(timeStr string) (time.Time, error) {
tnew := time.Date(t.Year(), t.Month(), t.Day(), tadj.Hour(), tadj.Minute(), t.Second(), t.Nanosecond(), t.Location())
return tnew, err
case TFRelHourMinute, TFRelHourFraction:
return RelToTime(timeStr, tfId)
return RelToTime(timeStr, tfId, contextTime)
default:
loc, err := time.LoadLocation("Local")