简体   繁体   中英

How can I make go Time compatible with js Date

When I define time like this in js

{expiry:new Date()}

and create a struct in go endpoints like this

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

I get a parse error from go

"parsing time \"\"2006-01-02T15:04:05Z07:00\"\" as \"\"2006-01-02T15:04:05Z07:00\"\": cannot parse \"07:00\"\" as \"\"\""

Any suggestions?

The documentation for time.UnmarshalJSON states:

UnmarshalJSON implements the json.Unmarshaler interface. The time is expected to be a quoted string in RFC 3339 format.

There is a problem that all browsers doesn't necessarily encode DateTime objects into RFC3339 format. However, your error message doesn't seem to imply that. You seem to try to encode the following JSON string:

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

That is not a timestamp, but rather the time package's reference layout. See this Playground example that shows how Go expects a timestamp to be like: http://play.golang.org/p/4NQ1pRidPt

However, there is still that problem with browser inconsistency. To avoid this you can use a function or library, as @elithrar suggested:

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

Output:

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

JSFiddle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM