【问题标题】:amCharts [Stocks] chartamCharts [股票] 图表
【发布时间】:2011-07-28 22:55:15
【问题描述】:

我一直在使用 amCharts 股票图表来显示来自 Yahoo Finance .csv 文件的数据,该文件以这种格式显示数据:(有效)

Date,Open,High,Low,Close,Volume,Adj Close
2011-07-27,617.18,620.95,604.75,607.22,3934400,607.22
2011-07-26,618.05,627.50,617.22,622.52,2342900,622.52
2011-07-25,613.36,625.41,613.00,618.98,3131600,618.98

但是现在我需要从 Google 财务中获取数据,他们将数据格式化为这种格式(这是行不通的)。

Date,Open,High,Low,Close,Volume
28-Jul-11,36.02,36.84,36.01,36.42,8870180
27-Jul-11,36.71,36.86,35.98,36.06,10395443
26-Jul-11,37.26,37.27,36.80,36.86,6366097

我认为 Yahoo 和 Google 之间的数据格式不同是导致 amChart 不显示任何数字的原因,因为它无法读取文件。

如何格式化日期以使其正确读取值?

【问题讨论】:

    标签: csv charts stock stockquotes amcharts


    【解决方案1】:

    我假设您使用的是 amstock 图表 1.4.0.1。在您的 amstock_settings.xml 中,您需要编辑日期格式设置。默认情况下,它使用 YYYY-MM-DD,我根据您的示例假设是 Yahoo Finance 在其 CSV 中的默认日期格式。 Google Finance 的日期格式为 DD-Mon-YY,基于 AmCharts 的“Mon”不是有效符号。您可以尝试将设置更改为 DD-Mon-YY 并查看它是否有效,否则您可能需要使用程序(例如 java)将 csv 中的日期值更改为 YYYY-MM-DD。

    <!-- [YYYY-MM-DD] (date format) The valid symbols are: YYYY, MM, DD, hh, mm, ss, fff. Any order
         and separators can be used, for example: DD-MM-YYYY, YYYY-MM, YYYY-DD-MM hh, 
         DD-MM-YY hh:mm:ss, etc. fff means milliseconds. In case you use miliseconds, you must provide the
         3 digit number -->
         <date_format>YYYY-MM-DD</date_format>
    

    【讨论】:

      【解决方案2】:

      amStock 不支持 28-Jul-11 格式的日期。您需要构建一个服务器端代理脚本,将所有日期转换为某种受支持的格式,例如 2011-07-28。

      这是 PHP 中的一个:

      <?php
      // get input data (replace with the actual data)
      // i.e.: $input = file_get_contents('http://...........');
      $input = "Date,Open,High,Low,Close,Volume
      28-Jul-11,36.02,36.84,36.01,36.42,8870180
      27-Jul-11,36.71,36.86,35.98,36.06,10395443
      26-Jul-11,37.26,37.27,36.80,36.86,6366097";
      
      // parse line by line
      $lines = preg_split("/\r\n|\r|\n/", $input);
      $cnt = sizeof($lines);
      for ($i = 0; $i < $cnt; $i++) {
        $cols = explode(',', $lines[$i]);
        if ($date = strtotime($cols[0])) {
          $cols[0] = date('Y-m-d', $date);
          $lines[$i] = implode(',', $cols);
        }
      }
      
      // output
      header('Content-Type: text/csv');
      echo implode("\r\n", $lines);
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        相关资源
        最近更新 更多