如何使用时间与js Date兼容

时间:2014-01-08 01:49:15

标签: javascript google-app-engine go google-cloud-endpoints

当我在js

中定义这样的时间时
{expiry:new Date()}

并在go端点中创建一个像这样的结构

{Expiry time.Time `json:"expiry"`}

我从go

得到一个解析错误
"parsing time \"\"2006-01-02T15:04:05Z07:00\"\" as \"\"2006-01-02T15:04:05Z07:00\"\": cannot parse \"07:00\"\" as \"\"\""

有什么建议吗?

1 个答案:

答案 0 :(得分:6)

time.UnmarshalJSON的文档声明:

  

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

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

"2006-01-02T15:04:05Z07:00"

这不是时间戳,而是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);

<强>输出:

{"expiry": "2014-01-08T08:54:44+01:00"} 

JSFiddle