d3-time-format
d3-time-format copied to clipboard
Parsing Negative Unix Values Fail
Any negative unix value is failed to be correctly parsed
> var parseUnix = d3.timeParse("%Q")
> parseUnix(978325200000).toString()
"Mon Jan 01 2001 00:00:00 GMT-0500 (Eastern Standard Time)"
> parseUnix(0).toString()
"Wed Dec 31 1969 19:00:00 GMT-0500 (Eastern Standard Time)"
> parseUnix(-1)
null
Note that formatting dates prior to epoch, returns negative values
> var formatUnix = d3.timeFormat("%Q");
> formatUnix(new Date(-1))
-1
> var parseUnix = d3.timeParse("%Q")
> parseUnix(formatUnix(new Date(-1)))
null
As you may have noticed that the native JS Date constructor is able to parse negative Unix time, so not a huge problem for basic tasks, but support for parsing negative values may be needed in more complex tasks.
Yep, this parser uses the generic numberRe, which doesn’t allow a leading negative sign (since that doesn’t match sense for most other fields). We should consider adding it.
https://github.com/d3/d3-time-format/blob/9632a7e2550aeeb6d821ed7ca4ca57dc2b81e6b9/src/locale.js#L383