d3-time-format icon indicating copy to clipboard operation
d3-time-format copied to clipboard

Parsing Negative Unix Values Fail

Open iltimasd opened this issue 5 years ago • 1 comments

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.

iltimasd avatar Jul 08 '20 21:07 iltimasd

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

mbostock avatar Jul 08 '20 21:07 mbostock