d3 / d3-time-format

Parse and format times, inspired by strptime and strftime.
https://d3js.org/d3-time-format
ISC License
328 stars 99 forks source link

Parsing Negative Unix Values Fail #87

Open iltimasd opened 4 years ago

iltimasd commented 4 years ago

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.

mbostock commented 4 years ago

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