1
0
mirror of https://github.com/robertkrimen/otto synced 2025-10-12 20:27:30 +08:00
otto/builtin_date.go
2013-06-04 19:56:03 -07:00

143 lines
3.8 KiB
Go

package otto
import (
Time "time"
)
// Date
const (
// TODO Be like V8?
// builtinDate_goDateTimeLayout = "Mon Jan 2 2006 15:04:05 GMT-0700 (MST)"
builtinDate_goDateTimeLayout = Time.RFC1123 // "Mon, 02 Jan 2006 15:04:05 MST"
builtinDate_goDateLayout = "Mon, 02 Jan 2006"
builtinDate_goTimeLayout = "15:04:05 MST"
)
func builtinDate(call FunctionCall) Value {
date := &_dateObject{}
if len(call.ArgumentList) == 0 {
// TODO Should make this prettier
date.Set(newDateTime([]Value{}, Time.Local))
return toValue(date.Time().Format(builtinDate_goDateTimeLayout))
}
date.Set(newDateTime(call.ArgumentList, Time.Local))
return toValue(date.Time().Local().Format(builtinDate_goDateTimeLayout))
}
func builtinNewDate(self *_object, _ Value, argumentList []Value) Value {
return toValue(self.runtime.newDate(newDateTime(argumentList, Time.Local)))
}
func builtinDate_toString(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return toValue("Invalid Date")
}
return toValue(date.Time().Local().Format(builtinDate_goDateTimeLayout))
}
func builtinDate_toDateString(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return toValue("Invalid Date")
}
return toValue(date.Time().Local().Format(builtinDate_goDateLayout))
}
func builtinDate_toTimeString(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return toValue("Invalid Date")
}
return toValue(date.Time().Local().Format(builtinDate_goTimeLayout))
}
func builtinDate_toUTCString(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return toValue("Invalid Date")
}
return toValue(date.Time().Format(builtinDate_goDateTimeLayout))
}
func builtinDate_toGMTString(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return toValue("Invalid Date")
}
return toValue(date.Time().Format("Mon, 02 Jan 2006 15:04:05 GMT"))
}
func builtinDate_getTime(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return NaNValue()
}
// We do this (convert away from a float) so the user
// does not get something back in exponential notation
return toValue(int64(date.Epoch()))
}
func builtinDate_setTime(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
date.Set(toFloat(call.Argument(0)))
return date.Value()
}
func _builtinDate_set(call FunctionCall, argumentCap int, dateLocal bool) (*_dateObject, *_ecmaTime) {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return nil, nil
}
for index := 0; index < len(call.ArgumentList) && index < argumentCap; index++ {
value := call.Argument(index)
if value.IsNaN() {
date.SetNaN()
return date, nil
}
}
baseTime := date.Time()
if dateLocal {
baseTime = baseTime.Local()
}
ecmaTime := ecmaTime(baseTime)
return date, &ecmaTime
}
func builtinDate_parse(call FunctionCall) Value {
date := toString(call.Argument(0))
return toValue(dateParse(date))
}
func builtinDate_UTC(call FunctionCall) Value {
return toValue(newDateTime(call.ArgumentList, Time.UTC))
}
// This is a placeholder
func builtinDate_toLocaleString(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return toValue("Invalid Date")
}
return toValue(date.Time().Local().Format("2006-01-02 15:04:05"))
}
// This is a placeholder
func builtinDate_toLocaleDateString(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return toValue("Invalid Date")
}
return toValue(date.Time().Local().Format("2006-01-02"))
}
// This is a placeholder
func builtinDate_toLocaleTimeString(call FunctionCall) Value {
date := dateObjectOf(call.thisObject())
if date.isNaN {
return toValue("Invalid Date")
}
return toValue(date.Time().Local().Format("15:04:05"))
}