8

根据此页面上的说明: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")); 
4

3 回答 3

11

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

与“自然语言”日期解析器(包括 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 时间格式

于 2013-10-24T23:10:19.673 回答
3

它非常严格,请始终检查您的情况。例如:

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

但:

format = d3.time.format("%m/%d/%Y");给出有效的结果

于 2017-07-31T09:33:07.790 回答
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被正确定义。

于 2021-06-22T14:50:27.650 回答