D3时间解析返回null

时间:2013-10-24 21:59:54

标签: javascript d3.js

根据此页面上的说明:https://github.com/mbostock/d3/wiki/Time-Formatting我正在尝试解析ISO 8601日期,以便在D3.js中使用。我的测试几乎一字不差地发布了,我无法让它用于完整的日期时间字符串:

var format = d3.time.format("%Y-%m-%d");
alert(format.parse("2011-07-01T19:15:28Z")); 

3 个答案:

答案 0 :(得分:9)

您必须将您提供的所有字段添加到格式字符串中。

  

与“自然语言”日期解析器(包括JavaScript的内置解析)不同,此方法是严格的:如果指定的字符串与关联的格式说明符不完全匹配,则此方法返回null。例如,如果关联的格式是完整的ISO 8601字符串“%Y-%m-%dT%H:%M:%SZ”,则将正确解析字符串“2011-07-01T19:15:28Z” ,但“2011-07-01T19:15:28”,“2011-07-01 19:15:28”和“2011-07-01”将返回null,尽管有效期为8601个日期。

试试这个:

var format = d3.time.format("%Y-%m-%dT%H:%M:%SZ");
alert(format.parse("2011-07-01T19:15:28Z"));

在指定的时间和日期创建一个新的Date对象。

D3 Time Format

答案 1 :(得分:2)

超级严格,经常检查你的情况。例如:

format = d3.time.format("%m/%d/%y");返回 null

但:

format = d3.time.format("%m/%d/%Y");提供有效结果

答案 2 :(得分:0)

对我来说,这个问题是由我执行以下操作引起的:

const parseTime = d3.timeParse('%Y-%m-%d');
const pos = parseTime(2021-11-13);
// pos is null but does not error!!

我的错误是将一个整数等式相减作为输入,这将导致该行以 parseTime(1997) 结尾。我需要把它变成一个像这样的字符串:

const pos = parseTime('2021-11-13');

那么 pos 定义正确。