mirror of
https://github.com/Threnklyn/zeit.git
synced 2026-05-18 21:03:30 +02:00
Putting relative times in Context if wanted
Putting relative times in Context if wanted
This commit is contained in:
+6
-6
@@ -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
@@ -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
@@ -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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user