2011-07-28 148 views
0

我一直在使用amCharts庫存走勢圖顯示來自雅虎財經.csv文件,在這種格式顯示數據的數據:(工作)amCharts [股票]圖表

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 

我相信雅虎和谷歌之間的不同的數據格式是什麼導致了amChart到,因爲它無法讀取該文件不顯示任何數據。

如何格式化日期以使其正確讀取值?

回答

1

我假設你使用的是amstock圖表1.4.0.1。在您的amstock_settings.xml中,您需要編輯日期格式設置。默認情況下,它使用YYYY-MM-DD,我假設它基於您的示例是雅虎財經的CSV中的默認日期格式。 Google財務的日期格式是DD-Mon-YY,它基於AmCharts的「星期一」不是有效的符號。您可以嘗試將設置更改爲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> 
1

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); 
?>