【问题标题】:C3.js - Timeseries with time fails to parseC3.js - 时间序列无法解析
【发布时间】:2015-12-15 00:24:22
【问题描述】:

我想使用2015-09-17 18:20:34 格式的日期和'%Y-%m-%d %H:%M:%S' 格式的字符串显示一个带有C3.js 的时间序列图表,但它无法解析。

我的代码:

var chart = c3.generate({
    bindto: '#chart',
    data: {
      x: 'times',
      columns: [
        ['times','2015-09-17 18:20:34','2015-09-17 18:25:42','2015-09-17 18:30:48'],
        ['data','1539','1546','1546','1550']
      ]
    },
    axis: {
        x: {
            type: 'timeseries',
            tick: {
                format: '%Y-%m-%d %H:%M:%S'
            }
        }
    }
});

我收到以下错误:

02:26:44.889 Failed to parse x '2015-09-17 18:20:34' to Date object c3.min.js:1:21943
02:26:44.889 Failed to parse x '2015-09-17 18:25:42' to Date object c3.min.js:1:21943
02:26:44.890 Failed to parse x '2015-09-17 18:30:48' to Date object c3.min.js:1:21943
02:26:44.890 Failed to parse x '2015-09-17 18:20:34' to Date object c3.min.js:1:21943
02:26:44.891 Failed to parse x '2015-09-17 18:25:42' to Date object c3.min.js:1:21943
02:26:44.892 Failed to parse x '2015-09-17 18:30:48' to Date object c3.min.js:1:21943

如果我在数据和格式中省略时间,它会起作用,但我也需要时间。

【问题讨论】:

  • 嘿,这个问题你有更新吗,我也在等答案:)
  • @vinodh 是的,我找到了解决方案并发布了它。 :)(如果有帮助,请随时投票:D)

标签: javascript parsing time-series c3.js


【解决方案1】:

我找到了解决问题的方法:

axis 对象中的格式只是定义日期的显示方式。如果要指定日期解析的格式,则必须在 data 对象中使用 xFormat

var chart = c3.generate({
    bindto: '#chart',
    data: {
      x: 'times',
      xFormat: '%Y-%m-%d %H:%M:%S', // how the date is parsed
      columns: [
        ['times','2015-09-17 18:20:34','2015-09-17 18:25:42','2015-09-17 18:30:48'],
        ['data','1539','1546','1546','1550']
      ]
    },
    axis: {
        x: {
            type: 'timeseries',
            tick: {
                format: '%Y-%m-%d %H:%M:%S' // how the date is displayed
            }
        }
    }
});

【讨论】:

  • 我试过了,但它会提供 Nan .. 你有什么想法吗?
  • xFormat: '%Y/%m/%d %H:%M:%S %A', 格式: '%Y-%m-%d %H:%M:%S %A'
  • 你的时间数据是什么样子的?
  • 2015/09/18 03:03:32 PM
  • 改用此格式字符串:'%Y/%m/%d %H:%M:%S %p' :) 天哪,要查找有关 xFormat 语法的信息真是太麻烦了。实际上我没有找到任何东西,但注意到它类似于 MySQL DATE_FORMAT() 语法。在 MySQL 中,%p 是 AM/PM 的占位符。
【解决方案2】:

还有另一种将日期传递给 c3 时间序列数组的方法。您可以在将日期字符串输入 c3 之前将其转换为 Javascript Date object

var chart = c3.generate({
    bindto: '#chart',
    data: {
      x: 'times',
      xFormat: '%Y-%m-%d %H:%M:%S', // how the date is parsed
      columns: [
        ['times',new Date('2015-09-17 18:20:34'),new Date('2015-09-17 18:25:42'),new Date('2015-09-17 18:30:48')],
        ['data','1539','1546','1546','1550']
      ]
    },
    axis: {
        x: {
            type: 'timeseries',
            tick: {
                format: '%Y-%m-%d %H:%M:%S' // how the date is displayed
            }
        }
    }
});

如果您在将日期字符串转换为日期对象时遇到困难(例如 2016-01-01T00:00:00Z ),您还可以使用 momentjs 来解析您的日期字符串。

var momentjsobject = moment('2016-05-06T00:00:00Z');
var dateObject = new Date(momentjsobject.format('YYYY-MM-DD HH:mm:ss'));

【讨论】:

  • 如果你已经提供了一个 Date 对象,我猜你不需要xFormat 来指定它的解析方式?
  • 确实,xformat 是用来解析日期字符串的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 2015-11-08
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多