如何用微秒解析日期字符串

时间:2017-10-30 06:07:07

标签: datetime d3.js

我有一些日期时间字符串,例如

"2017-10-29T02:54:03.125983+00:00"
"2017-10-29T02:09:22.1453833+00:00"

有6或7位数字长度毫秒,如何用d3 javascript语言将其解析为日期对象?我试过了

d3.timeParse("%Y-%m-%dT%H:%M:%S.%LZ"); 

但失败了,它返回null

2 个答案:

答案 0 :(得分:2)

你所拥有的不是长毫秒 :这是微秒

自D3 v4以来,D3中有一个指示符为微秒(参见here)。要解析微秒,请使用"f"。根据API:

  

%f - 微秒作为十进制数[000000,999999]。

以下是使用您的字符串的演示(请勿查看Stack代码段控制台,点击"运行代码段"然后打开浏览器控制台查看实际日期):



var date = "2017-10-29T02:54:03.125983+00:00";
var parser = d3.timeParse("%Y-%m-%dT%H:%M:%S.%f%Z"); 
console.log(parser(date))

<script src="https://d3js.org/d3-time-format.v2.min.js"></script>
&#13;
&#13;
&#13;

三项意见

  1. 与自己的API所说的相反,"f"使用默认包。您必须参考独立时间微库(请查看我上面的演示以查看URL)。让我们证明一下:
  2. &#13;
    &#13;
    var date = "2017-10-29T02:09:22.145383+00:00";
    var parser = d3.timeParse("%Y-%m-%dT%H:%M:%S.%f%Z"); 
    console.log(parser(date))
    &#13;
    <script src="https://d3js.org/d3.v4.min.js"></script>
    &#13;
    &#13;
    &#13;

    1. 删除"Z"。它应该是"%Z"。正如API所说,&#34;请注意,此处的文字Z与时区偏移指令%Z&#34; ;
    2. 不同
    3. 没有7位数的微秒。它必须是6位数。
    4. 标题编辑。

答案 1 :(得分:-1)

您正在尝试解析不正确的日期对象,我想您要格式化日期对象。

而不是:

d3.timeParse("%Y-%m-%dT%H:%M:%S.%LZ");

试试这个:

d3.timeFormat("%Y-%m-%dT%H:%M:%S.%LZ");