Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在取自电子表格的google Visualization datatable列中包含日期列_Javascript_Date_Charts_Google Visualization - Fatal编程技术网

Javascript 如何在取自电子表格的google Visualization datatable列中包含日期列

Javascript 如何在取自电子表格的google Visualization datatable列中包含日期列,javascript,date,charts,google-visualization,Javascript,Date,Charts,Google Visualization,我有一张谷歌表格,看起来像这样: Date Sales 31/03/2017 1000 30/06/2017 2000 30/09/2017 1500 31/12/2017 2500 31/03/2018 4000 如果我在Google charts中使用.arrayToDataTable导入此数据,并将列0的类型设置为“日期”或“字符串”-它不喜欢它,因为日期只是一个格式化的数字,即43190=31/3/2018。因此,类型必须是“数字”,然后只在图表上显示基础数字,

我有一张谷歌表格,看起来像这样:

   Date     Sales
31/03/2017  1000
30/06/2017  2000
30/09/2017  1500
31/12/2017  2500
31/03/2018  4000
如果我在Google charts中使用.arrayToDataTable导入此数据,并将列0的类型设置为“日期”或“字符串”-它不喜欢它,因为日期只是一个格式化的数字,即43190=31/3/2018。因此,类型必须是“数字”,然后只在图表上显示基础数字,而不显示日期

我可以循环遍历每一行的值,并且我已经尝试用这个来更改它们

function formatDate(date) {
   var d = new Date((date - 25569)*86400*1000),
   locale = "en-us",
   month = d.toLocaleString(locale, { month: "short" });
   var formattedDate = d.getDay() + "/" + month + "/" + d.getFullYear();
   return formattedDate
}
这会将数字转换为日期字符串-因此,如果输入值为43190,它将返回2018年3月31日,但我仍然无法将列类型更改为“日期”

我可以将日期输出为字符串,但它们不是按时间顺序排序,而是按字母顺序排序——我希望它们是按时间顺序排序的

有人能告诉我哪里出了问题吗

编辑:

如果我将函数更改为

function formatDate(date) {
  var d = new Date((date - 25569)*86400*1000)
  return d
}
现在,将列值设置为full date对象

但我得到一个错误,即“值Sun Jun 30 2013 01:00:00 GMT+0100(GMT夏季时间)与列索引0中的类型编号不匹配”

现在,这一定是指datatable列zero,它在原始表中是一个日期编号。我尝试添加:

data.setColumnProperty(0, 'type' , 'date')
但似乎得到了同样的错误

也许我没有在代码中的正确位置更改类型

澄清一下:我从google工作表中的一个范围中获取原始值,然后使用.arrayToDataTable将该范围转换为数据表。因此,我不确定我是否可以在创建datatable时定义列类型,因此我单独尝试使用:

data.setColumnProperty(0, 'type' , 'date')

必须在“日期类型”列中提供完整的日期对象

关于日期的好文档可以在这里找到

日期和销售额的示例可以是

var data = new google.visualization.DataTable();
        data.addColumn('date', 'Date');
        data.addColumn('number', 'Sales');

        data.addRows([
          [new Date(2015, 0, 1), 5],  [new Date(2015, 0, 2), 7],  [new Date(2015, 0, 3), 3],
          [new Date(2015, 0, 4), 1],  [new Date(2015, 0, 5), 3],  [new Date(2015, 0, 6), 4],
          [new Date(2015, 0, 7), 3],  [new Date(2015, 0, 8), 4],  [new Date(2015, 0, 9), 2],
          [new Date(2015, 0, 10), 5], [new Date(2015, 0, 11), 8], [new Date(2015, 0, 12), 6],
          [new Date(2015, 0, 13), 3], [new Date(2015, 0, 14), 3], [new Date(2015, 0, 15), 5],
          [new Date(2015, 0, 16), 7], [new Date(2015, 0, 17), 6], [new Date(2015, 0, 18), 6],
          [new Date(2015, 0, 19), 3], [new Date(2015, 0, 20), 1], [new Date(2015, 0, 21), 2],
          [new Date(2015, 0, 22), 4], [new Date(2015, 0, 23), 6], [new Date(2015, 0, 24), 5],
          [new Date(2015, 0, 25), 9], [new Date(2015, 0, 26), 4], [new Date(2015, 0, 27), 9],
          [new Date(2015, 0, 28), 8], [new Date(2015, 0, 29), 6], [new Date(2015, 0, 30), 4],
          [new Date(2015, 0, 31), 6], [new Date(2015, 1, 1), 7],  [new Date(2015, 1, 2), 9]
        ]);
您可以添加以下选项来设置日期格式

hAxis: {
    format: 'MM/dd/yyyy'
}

哦,我快到了。。。。我将{label:'Period',type:'date'}添加到数组源代码中,现在我可以识别日期了。因此,我将尝试在过滤器和轴中格式化它们,现在您正在使用.arrayToDataTable转换为datatable。在我的示例中,我使用新的google.visualization.dataTable()创建了一个dataTable;然后添加具有类型的列和行。此外,我在文档中找不到函数setColumnProperty。您正在创建什么类型的图表?谢谢您的回复。这是一个柱状图。.setColumnProperty位于DataTable类中。但没关系,我已经在我的应用程序脚本中将它直接添加到源数组中。我已经格式化了axis,但现在无法格式化类别过滤器,在图表上绘制时间列很奇怪。它绘制了跨越多年的时间点,实际时间点在一个巨大的柱的中心。无论如何…我会得到一个巨大的列,检查…你可以设置hAxis.maxValue和hAxis.minValue来定义水平轴的范围