Thanks Justing.
What really is confusing me is that when passed through ports, the date
field of JSON *appeared in the form of <Thu Jan 26 2017 11:43:57 GMT+0800
(CST)>* while the rest of the fields is just old plain string. I’m probably
wrong but it almost seems that Elm is doing some extra work on ISO date
strings, silently parsing them into internal representations when receiving
from ports.
For your convenience, some relevant code:
type Msg =
...
| CommentJson Json.Encode.Value
port comments_json : ( Json.Encode.Value -> msg) -> Sub msg
update : Msg -> Model -> ( Model, Cmd Msg)
update msg model =
case msg of
CommentJson value ->
let
_ = Debug.log "value" value
in
...
And in console I just got
value: { 0 = { author = { type = "full", displayName = "fxmy", url =
"https://github.com/fxmy", picture =
"https://avatars.githubusercontent.com/u/3283415?v=3&s=73" }, content =
"another test", date = <Thu Jan 26 2017 11:43:57 GMT+0800 (CST)> } }
Any ideas how to hunt this down?
Cheers,
在 2017年1月30日星期一 UTC+8下午11:21:34,Justin Mimbs写道:
If you already have a Date in JS that you need to get into Elm, then
> sending it as an ISO string will certainly work. But another, more direct
> way to pass a date representation through a port is to pass it as a number,
> using the getTime
> <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime>
> method
> in JS. In Elm, you can decode it as a Float and then convert it to a Date
> with Date.fromTime
> <http://package.elm-lang.org/packages/elm-lang/core/5.1.1/Date#fromTime>.
>
> There isn't a *Json.Decode.date*, likely because JSON doesn't describe a
> standard way to encode dates. In Elm, the idea of Json encoding/decoding
> extends to all conversions between JS types and Elm types, which is nice in
> that it gives us a unifying concept, but it does leave out the ability to
> pass Date values to and from Elm, without first converting them to a
> JSON-representable type.
>
> Justin
>
> On Sunday, January 29, 2017 at 2:47:43 PM UTC-5, Mickey Vashchinsky wrote:
>>
>> Looks like you already have Date and not String.
>>
>> I am pretty new to Elm myself and I couldn't find a way to decodeValue of
>> Date, but, I think as a workaround, on JavaScript side before sending
>> the json through port, you could convert your Date fields to String
>> with:
>>
>> myJson.date = myJson.date.toISOString()
>>
>> Hope it helps.
>>
>>
>> On Sunday, January 29, 2017 at 4:55:51 PM UTC+2, fxmy wang wrote:
>>>
>>> Hi guys,
>>> So I was trying to decode a field named date inside JSON as String but
>>> without success. And the result is quite confusing.
>>> Could anyone shed some light on me?
>>>
>>> JSON:
>>>
>>> [{"author":{"type":"full","displayName":"fxmy","url":"https://github.com/fxmy","picture":"https://avatars.githubusercontent.com/u/3283415?v=3&s=73"},"content":"another
>>> test","date":"2017-01-26T03:43:57.190Z"}]
>>>
>>> Json.Encode.Value that comes through port ( via Debug.log) :
>>>
>>> value: { 0 = { author = { type = "full", displayName = "fxmy", url =
>>> "https://github.com/fxmy", picture =
>>> "https://avatars.githubusercontent.com/u/3283415?v=3&s=73" }, content =
>>> "another test", date = <Thu Jan 26 2017 11:43:57 GMT+0800 (CST)> } }
>>>
>>> When trying to decode date field as String I got this,
>>> Result after calling Json.Decode.decodeValue ( via Debug.log) :
>>>
>>> Err "Expecting a String at _[0].date but instead got:
>>> \"2017-01-26T03:43:57.190Z\""
>>>
>>> What am I doing wrong?
>>>
>>> Cheers.
>>>
>>>
>>
--
You received this message because you are subscribed to the Google Groups "Elm
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.