【问题标题】:D3 adding 19 hours when it formats timeD3 在格式化时间时增加 19 小时
【发布时间】:2015-07-29 15:27:00
【问题描述】:

我正在尝试将数据库返回的以秒为单位的值转换为日期对象,然后将其传递给 D3 格式方法。但是当我任何时候尝试格式化时,d3 的格式化功能会增加我 19 个小时的时间!例如,将 0 传递给日期对象,如下所示:

// create the third column for each segment.
tr.append("td").attr("class",'legendFreq')
    .text(function(d){ return d3.time.format("%H:%M:%S")(new Date(0));});

返回19:0:0

有人知道这里发生了什么吗?

【问题讨论】:

  • 返回当前时间,不带偏移量。使用 Date('string') 和 Date(year,month,day,hour,min,sec) 也可以正常工作。但是我想知道为什么没有这个巨大的偏移量我不能让毫秒日期功能工作 - 当我在格式函数中使用 12 小时而不是 24 小时时,它会给出 7 小时的偏移量?我只是超级困惑。

标签: javascript date d3.js format


【解决方案1】:

d3 没有添加小时,差异是基于时区的。

new Date(0) 默认返回一个时区相关的日期对象。 (对我来说是Thu Jan 01 1970 01:00:00 GMT+0100 (W. Europe Standard Time)

如果我使用你的 d3.format 函数,我只会(正确地)得到小时部分:"01:00:00"

要使您的时间戳与时区无关,您应该使用d3.time.format.utc 函数。使用它,我得到"00:00:00"

d3.time.format.utc("%H:%M:%S")(new Date(0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多