msgpack-php icon indicating copy to clipboard operation
msgpack-php copied to clipboard

PHP Fails to Deserialize Date Objects Created in Javascript

Open doc987 opened this issue 7 years ago • 3 comments

If a Date object is created in Javascript (new Date()), and is serialized with MessagePack, then PHP will fail to deserialize with the following message: PHP Warning: [msgpack] (php_msgpack_unserialize) Parse error

This happens if the Date object is by itself, or part of another object. It also happens if the serialization is done with either of the two javascript libraries listed on https://msgpack.org

  • https://github.com/kawanet/msgpack-lite: Serializes Date as ext 8 (0xc7).
  • https://github.com/ygoe/msgpack.js: Serializes Date as timestamp 64 (0xd7).

MessagePack Specification: https://github.com/msgpack/msgpack/blob/master/spec.md

Expected Behavior: Javascript Date is deserialized to PHP DateTime.

doc987 avatar Aug 06 '18 04:08 doc987

Unfortunately, msgpack-php doesn't support the ext type yet (see this comment). As a workaround, you can use the pure php msgpack library.

rybakit avatar Aug 06 '18 07:08 rybakit

Are there plans to do so, or is this library no longer being maintained? I noticed there hasn't been a release since December 6, 2016. I would generally prefer an extension as they are likely to have better performance (and one of the benefits of MessagePack is better performance), but if the PHP implementation is the one being maintained, then that would be a better choice. Is it recommended that the PHP implementation be used for new projects instead of the PHP extension?

doc987 avatar Aug 06 '18 14:08 doc987

This is on the roadmap now.

m6w6 avatar Dec 18 '19 16:12 m6w6