I have a JSON object returning a unix timestamp of content piece's publish dates. This timestamp returns as an invalid date when using .toISOString() unless I multiply it by 1.
As an example
let timestamp = item[index].date; // returns string of "1584632700000"
let invalidDate = new Date(timestamp).toISOString(); // returns invalid Date
let validDate = new Date(timestamp * 1).toISOString(); // returns valid (and correct) Date
What is the reason behind this?
The reason behind this is how new Date interprets its arguments.
Looking at the relevant prototypes we see:
new Date(value)
new Date(dateString)
Where value is a number and dateString a string.
This means the function acts different when passed a string and a number.
value is described by MDN as:
Integer value representing the number of milliseconds since January 1, 1970, 00:00:00 UTC, with leap seconds ignored (Unix Epoch; but consider that most Unix timestamp functions count in seconds).
And dateString as:
String value representing a date. The string should be in a format recognized by the Date.parse() method (IETF-compliant RFC 2822 timestamps and also a version of ISO8601).
Since you pass it a string, it will use the second approach which is trying to parse the date.
Now, why does it work with * 1?
* 1 is converting the string to a number in an implicit manner.
You can also use parseInt to do this which is a bit more verbose:
new Date(parseInt('1584632700000', 10))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With