mirror of
https://github.com/Threnklyn/zeit.git
synced 2026-05-19 05:13:31 +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.Task = task
|
||||||
newEntry.User = user
|
newEntry.User = user
|
||||||
|
|
||||||
_, err = newEntry.SetBeginFromString(begin)
|
_, err = newEntry.SetBeginFromString(begin, time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Entry{}, err
|
return Entry{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = newEntry.SetFinishFromString(finish)
|
_, err = newEntry.SetFinishFromString(finish, time.Time{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Entry{}, err
|
return Entry{}, err
|
||||||
}
|
}
|
||||||
@@ -65,14 +65,14 @@ func (entry *Entry) SetIDFromDatabaseKey(key string) (error) {
|
|||||||
return nil
|
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 beginTime time.Time
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
if begin == "" {
|
if begin == "" {
|
||||||
beginTime = time.Now()
|
beginTime = time.Now()
|
||||||
} else {
|
} else {
|
||||||
beginTime, err = ParseTime(begin)
|
beginTime, err = ParseTime(begin, contextTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return beginTime, err
|
return beginTime, err
|
||||||
}
|
}
|
||||||
@@ -82,12 +82,12 @@ func (entry *Entry) SetBeginFromString(begin string) (time.Time, error) {
|
|||||||
return beginTime, nil
|
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 finishTime time.Time
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
if finish != "" {
|
if finish != "" {
|
||||||
finishTime, err = ParseTime(finish)
|
finishTime, err = ParseTime(finish, contextTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return finishTime, err
|
return finishTime, err
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -25,7 +25,7 @@ var entryCmd = &cobra.Command{
|
|||||||
|
|
||||||
if begin != "" || finish != "" || project != "" || notes != "" || task != "" {
|
if begin != "" || finish != "" || project != "" || notes != "" || task != "" {
|
||||||
if begin != "" {
|
if begin != "" {
|
||||||
entry.Begin, err = entry.SetBeginFromString(begin)
|
entry.Begin, err = entry.SetBeginFromString(begin, entry.Begin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("%s %+v\n", CharError, err)
|
fmt.Printf("%s %+v\n", CharError, err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@@ -33,7 +33,7 @@ var entryCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if finish != "" {
|
if finish != "" {
|
||||||
entry.Finish, err = entry.SetFinishFromString(finish)
|
entry.Finish, err = entry.SetFinishFromString(finish, entry.Finish)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("%s %+v\n", CharError, err)
|
fmt.Printf("%s %+v\n", CharError, err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|||||||
+15
-3
@@ -12,6 +12,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/araddon/dateparse"
|
"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
|
// 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])
|
var re = regexp.MustCompile(TimeFormats()[ftId])
|
||||||
gm := re.FindStringSubmatch(timeStr)
|
gm := re.FindStringSubmatch(timeStr)
|
||||||
|
|
||||||
@@ -80,6 +81,17 @@ func RelToTime(timeStr string, ftId int) (time.Time, error) {
|
|||||||
|
|
||||||
var t time.Time
|
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] {
|
switch gm[1] {
|
||||||
case "+":
|
case "+":
|
||||||
t = time.Now().Local().Add(time.Hour * time.Duration(hours) + time.Minute * time.Duration(minutes))
|
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
|
return t, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseTime(timeStr string) (time.Time, error) {
|
func ParseTime(timeStr string, contextTime time.Time) (time.Time, error) {
|
||||||
tfId := GetTimeFormat(timeStr)
|
tfId := GetTimeFormat(timeStr)
|
||||||
|
|
||||||
t:= time.Now()
|
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())
|
tnew := time.Date(t.Year(), t.Month(), t.Day(), tadj.Hour(), tadj.Minute(), t.Second(), t.Nanosecond(), t.Location())
|
||||||
return tnew, err
|
return tnew, err
|
||||||
case TFRelHourMinute, TFRelHourFraction:
|
case TFRelHourMinute, TFRelHourFraction:
|
||||||
return RelToTime(timeStr, tfId)
|
return RelToTime(timeStr, tfId, contextTime)
|
||||||
default:
|
default:
|
||||||
loc, err := time.LoadLocation("Local")
|
loc, err := time.LoadLocation("Local")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user