Skip to content

Commit

Permalink
Merge pull request #72 from rokostik/add-date-datetime
Browse files Browse the repository at this point in the history
Add date and datetime functions
  • Loading branch information
refaktor authored Dec 21, 2023
2 parents dfe61c0 + 4b3d6a2 commit 018e314
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
35 changes: 35 additions & 0 deletions evaldo/builtins.go
Original file line number Diff line number Diff line change
Expand Up @@ -6188,6 +6188,41 @@ var builtins = map[string]*env.Builtin{
},

// date time functions

"date": {
Argsn: 1,
Doc: "Accepts a String and returns a Date object.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) (res env.Object) {
switch s1 := arg0.(type) {
case env.String:
t, err := time.Parse("2006-01-02", s1.Value)
if err != nil {
return MakeBuiltinError(ps, err.Error(), "date")
}
return *env.NewDate(t)
default:
return MakeArgError(ps, 1, []env.Type{env.StringType}, "date")
}
},
},

"datetime": {
Argsn: 1,
Doc: "Accepts a String and returns a Date object.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) (res env.Object) {
switch s1 := arg0.(type) {
case env.String:
t, err := time.Parse("2006-01-02T15:04:05", s1.Value)
if err != nil {
return MakeBuiltinError(ps, err.Error(), "datetime")
}
return *env.NewTime(t)
default:
return MakeArgError(ps, 1, []env.Type{env.StringType}, "datetime")
}
},
},

"now": {
Argsn: 0,
Doc: "Returns current Time.",
Expand Down
29 changes: 29 additions & 0 deletions tests/misc.rye
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,35 @@ section "Functions that change values in-place"

}

section "Date and time functions"
""
{

group "date"
mold\nowrap ?date
{ { string } }
{
equal { date "2023-01-01" |type? } 'date
equal { try { date "not-date" } |type? } 'error
}

group "datetime"
mold\nowrap ?datetime
{ { string } }
{
equal { datetime "2023-01-01T12:00:00" |type? } 'time
equal { try { datetime "not-time" } |type? } 'error
}

group "now"
mold\nowrap ?now
{ { string } }
{
equal { now |type? } 'time
}

}

; TODO equal { list { 3 4 5 6 } |map { .factor-of 3 } } list { 1 0 0 1 }

end

0 comments on commit 018e314

Please sign in to comment.