mirror of
https://github.com/ddworken/hishtory.git
synced 2025-02-23 05:51:08 +01:00
Improve datetime parsing for the after: and before: search atoms
This commit is contained in:
parent
688ac511a8
commit
e063f34997
@ -128,6 +128,7 @@ func DecryptHistoryEntry(userSecret string, entry shared.EncHistoryEntry) (Histo
|
|||||||
}
|
}
|
||||||
|
|
||||||
func parseTimeGenerously(input string) (time.Time, error) {
|
func parseTimeGenerously(input string) (time.Time, error) {
|
||||||
|
input = strings.ReplaceAll(input, "_", " ")
|
||||||
return dateparse.ParseLocal(input)
|
return dateparse.ParseLocal(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,7 +207,6 @@ func parseAtomizedToken(token string) (string, interface{}, error) {
|
|||||||
}
|
}
|
||||||
return "(CAST(strftime(\"%s\",start_time) AS INTEGER) < ?)", t.Unix(), nil
|
return "(CAST(strftime(\"%s\",start_time) AS INTEGER) < ?)", t.Unix(), nil
|
||||||
case "after":
|
case "after":
|
||||||
// TODO: This doesn't support precise timestamps containg a space. Can we do better here?
|
|
||||||
t, err := parseTimeGenerously(val)
|
t, err := parseTimeGenerously(val)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, fmt.Errorf("failed to parse after:%s as a timestamp: %v", val, err)
|
return "", nil, fmt.Errorf("failed to parse after:%s as a timestamp: %v", val, err)
|
||||||
|
@ -29,16 +29,41 @@ func TestParseTimeGenerously(t *testing.T) {
|
|||||||
if ts.Unix() != 1136243040 {
|
if ts.Unix() != 1136243040 {
|
||||||
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
||||||
}
|
}
|
||||||
|
ts, err = parseTimeGenerously("2006-01-02 T15:04:00 -08:00")
|
||||||
|
shared.Check(t, err)
|
||||||
|
if ts.Unix() != 1136243040 {
|
||||||
|
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
||||||
|
}
|
||||||
|
ts, err = parseTimeGenerously("2006-01-02_T15:04:00_-08:00")
|
||||||
|
shared.Check(t, err)
|
||||||
|
if ts.Unix() != 1136243040 {
|
||||||
|
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
||||||
|
}
|
||||||
ts, err = parseTimeGenerously("2006-01-02T15:04:00")
|
ts, err = parseTimeGenerously("2006-01-02T15:04:00")
|
||||||
shared.Check(t, err)
|
shared.Check(t, err)
|
||||||
if ts.Year() != 2006 || ts.Month() != time.January || ts.Day() != 2 || ts.Hour() != 15 || ts.Minute() != 4 || ts.Second() != 0 {
|
if ts.Year() != 2006 || ts.Month() != time.January || ts.Day() != 2 || ts.Hour() != 15 || ts.Minute() != 4 || ts.Second() != 0 {
|
||||||
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
||||||
}
|
}
|
||||||
|
ts, err = parseTimeGenerously("2006-01-02_T15:04:00")
|
||||||
|
shared.Check(t, err)
|
||||||
|
if ts.Year() != 2006 || ts.Month() != time.January || ts.Day() != 2 || ts.Hour() != 15 || ts.Minute() != 4 || ts.Second() != 0 {
|
||||||
|
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
||||||
|
}
|
||||||
|
ts, err = parseTimeGenerously("2006-01-02_15:04:00")
|
||||||
|
shared.Check(t, err)
|
||||||
|
if ts.Year() != 2006 || ts.Month() != time.January || ts.Day() != 2 || ts.Hour() != 15 || ts.Minute() != 4 || ts.Second() != 0 {
|
||||||
|
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
||||||
|
}
|
||||||
ts, err = parseTimeGenerously("2006-01-02T15:04")
|
ts, err = parseTimeGenerously("2006-01-02T15:04")
|
||||||
shared.Check(t, err)
|
shared.Check(t, err)
|
||||||
if ts.Year() != 2006 || ts.Month() != time.January || ts.Day() != 2 || ts.Hour() != 15 || ts.Minute() != 4 || ts.Second() != 0 {
|
if ts.Year() != 2006 || ts.Month() != time.January || ts.Day() != 2 || ts.Hour() != 15 || ts.Minute() != 4 || ts.Second() != 0 {
|
||||||
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
||||||
}
|
}
|
||||||
|
ts, err = parseTimeGenerously("2006-01-02_15:04")
|
||||||
|
shared.Check(t, err)
|
||||||
|
if ts.Year() != 2006 || ts.Month() != time.January || ts.Day() != 2 || ts.Hour() != 15 || ts.Minute() != 4 || ts.Second() != 0 {
|
||||||
|
t.Fatalf("parsed time incorrectly: %d", ts.Unix())
|
||||||
|
}
|
||||||
ts, err = parseTimeGenerously("2006-01-02")
|
ts, err = parseTimeGenerously("2006-01-02")
|
||||||
shared.Check(t, err)
|
shared.Check(t, err)
|
||||||
if ts.Year() != 2006 || ts.Month() != time.January || ts.Day() != 2 || ts.Hour() != 0 || ts.Minute() != 0 || ts.Second() != 0 {
|
if ts.Year() != 2006 || ts.Month() != time.January || ts.Day() != 2 || ts.Hour() != 0 || ts.Minute() != 0 || ts.Second() != 0 {
|
||||||
|
Loading…
Reference in New Issue
Block a user