如何使用时间与js Date兼容

Ger*_*ens 1 javascript google-app-engine go google-cloud-endpoints

当我在js中定义这样的时间时

{expiry:new Date()}
Run Code Online (Sandbox Code Playgroud)

并像这样在go端点中创建一个struct

{Expiry time.Time `json:"expiry"`}
Run Code Online (Sandbox Code Playgroud)

我得到一个解析错误

"parsing time \"\"2006-01-02T15:04:05Z07:00\"\" as \"\"2006-01-02T15:04:05Z07:00\"\": cannot parse \"07:00\"\" as \"\"\""
Run Code Online (Sandbox Code Playgroud)

有什么建议?

ANi*_*sus 6

time.UnmarshalJSON的文档说明:

UnmarshalJSON实现了json.Unmarshaler接口.预计时间是RFC 3339格式的带引号的字符串.

存在一个问题,即所有浏览器不一定将DateTime对象编码为RFC3339格式.但是,您的错误消息似乎并不意味着这一点.您似乎尝试编码以下JSON字符串:

"2006-01-02T15:04:05Z07:00"
Run Code Online (Sandbox Code Playgroud)

这不是时间戳,而是time包的参考布局.请参阅此Playground示例,其中显示了Go期望时间戳如何:http://play.golang.org/p/4NQ1pRidPt

但是,浏览器不一致仍存在问题.为避免这种情况,您可以使用函数或库,如@elithrar建议:

var a = {expiry: moment(new Date()).format("YYYY-MM-DDTHH:mm:ssZ")};
console.log(a);
Run Code Online (Sandbox Code Playgroud)

输出:

{"expiry": "2014-01-08T08:54:44+01:00"} 
Run Code Online (Sandbox Code Playgroud)

的jsfiddle