1. `new Date(obj)` calls obj.[[DefaultValue]]()
2. Date objects have a special weird [[DefaultValue]] method
that prefers to call .toString() rather than .valueOf().
3. As it happens, Date.prototype.toString() is lossy.
The spec doesn't require it, but implementations don't show milliseconds
in Date toString output and it's unlikely to change.
As a consequence, you can't use new Date(dateObj) to copy a Date object.
Firefox implements this to spec and this causes real-world issues:
https://github.com/timrwood/moment/pull/629
However at least Chrome doesn't implement the spec!
Proposal: Special-case this in the Date constructor (15.9.3.2).
>- 1. Let v be ToPrimitive(value).
>+ 1. If value has a [[DateValue]] property then let v be value.[[DateValue]]; else let v be ToPrimitive(value).
Per Conclusion/Resolution here: https://github.com/rwldrn/tc39-notes/blob/master/es6/2013-03/mar-13.md#414-make-new-datedateobj
When date object is passed to the Date constructor, it makes an accurate copy of the date object.
fixed in rev15 editor's draft
fixed in rev17, August 23, 2013 draft