The specs says that:
The actual range of times supported by ECMAScript Date objects is
[...] exactly –100,000,000 days to 100,000,000 days
measured relative to midnight at the beginning of 01 January, 1970
UTC. This gives a range of 8,640,000,000,000,000 milliseconds to
either side of 01 January, 1970 UTC.
The valid range is much smaller than the value you used (564,018,060,878,018,050).
And deep inside the Date(value) constructor we have:
If abs(time) > 8.64 × 1015, return NaN.
This explains why new Date(564018060878018050) yields invalid date.
As for Date(564018060878018050) the specs say that:
... Invoking a constructor without using new has consequences that
depend on the constructor. For example, Date() produces a string
representation of the current date and time rather than an object.
So Date(value) is supposed to return current date as a string and not a date.
> Date(564018060878018050) === (new Date()).toString()
< true
> typeof Date(564018060878018050)
< "string"
new Date(564018060878018050*1e-6).toISOString()produces "1987-11-15T23:41:00.878Z" so maybe it's nanoseconds from an epoch of 2000-01-01 (which would make it 2017-11-15)?