2015-05-28 22 views
2

我創建的文件api.php很好的做法,從PHP返回日期時間到JS

<?php 
// Prevent caching. 
header('Cache-Control: no-cache, must-revalidate'); 

// The JSON standard MIME header. 
header('Content-type: application/json'); 

//mssql_select_db("**", mssql_connect(**)); 
$conn=mssql_connect(***);  

$query = "SELECT ROUND([AirTemp_C],1) as [T] 
       ,[DT] 
      FROM [ASUTP].[dbo].[Temperature_ER] 
      WHERE [Place] = 'ER06' AND [DT] > '26.05.2015 11:00'"; 

$qwr_res = mssql_query($query); 

while ($row=mssql_fetch_array($qwr_res)) 
{ 
    $temps[] = array (
     'x' => $row['DT'], 
     'y' => $row['T'] 
       ); 
} 
echo json_encode($temps); 
?> 

它返回JSON像[{ 「X」: 「2015年5月26日11時02分04秒」, 「y」:26.3}]與我的測量。

我想用這個數據來繪製使用canvasjs-1.6.2的圖。這裏是我的代碼: 的window.onload =函數(){

$.getJSON("api.php",function(data1) 
         {        
          var chart = new CanvasJS.Chart("chartContainer", 
          { 

           title:{ 
            text: "Title", 
            fontSize: 30 
           }, 
           animationEnabled: true, 
           zoomEnabled:true, 
           height: 500, 
           axisX:{ 

            gridColor: "Silver", 
            tickColor: "silver", 
            labelAngle: -80, 
            valueFormatString: "DD.MM HH:mm" 

           },       
              toolTip:{ 
              shared:true 
              }, 
           theme: "theme2", 
           axisY: { 
            gridColor: "Silver", 
            tickColor: "silver" 
           }, 
           legend:{ 
            verticalAlign: "center", 
            horizontalAlign: "right" 
           }, 
           data: [ 
           {   
            type: "line", 
            showInLegend: true, 
            lineThickness: 2, 
            name: "T", 
            //markerType: "square", 
            color: "#F08080", 
            dataPoints: data1 
           } 
           ], 
          legend:{ 
           cursor:"pointer", 
           itemclick:function(e){ 
           if (typeof(e.dataSeries.visible) === "undefined" || e.dataSeries.visible) { 
            e.dataSeries.visible = false; 
           } 
           else{ 
            e.dataSeries.visible = true; 
           } 
           chart.render(); 
           } 
          } 
          }); 

          chart.render(); 
         }); 

但似乎這個圖表(或JS的話)不能使用我的日期值作爲正確的日期時間,以便圖表無法呈現。

我已經解決了這個問題,這樣的循環:

for(var i=0;i<data1.length;i++) 
{ 
    data1[i].x = new Date(data1[i].x); 
} 

我應該注意到我使用PHP 5.2,我不能升級。 所以我的問題是:

  1. 我的方式來通過api.php獲取圖表的數據是否正確?
  2. 有沒有辦法將正確的DateTime值從PHP傳遞給JS沒有該循環轉換?
+1

到由於不同的瀏覽器如何解析字符串日期不同,我更喜歡通過日期爲Unix的時間戳簡單。 – Rob

+0

你能告訴我正確的方法嗎?此外,我嚴格限制支持IE 6.0,因爲這是我們的法人規則,大多數用戶都使用IE 7/8。 – Kostya

回答

1

正如評論中指出的那樣,最可靠的跨瀏覽器傳輸日期的方式是使用時間值。自1970-01-01T00:00:00Z以來,UNIX時間值以秒爲單位。 Javascript時間值來自同一時代,但使用毫秒,因此您只需將UNIX時間值乘以1000,然後直接傳遞給Date構造函數。

所以JSON可能是這樣的:

'[{x:"1432788147300", y:26.3}]' 

如果X值讀取到一個名爲unixTimeValue變量,該代碼將是這樣的:

var javascriptDate = new Date(unixTimeValue * 1000); 

然而,如果你不能這樣做,你可以很容易地解析字符串'2015-05-26 11:02:04'。假設日期是UTC,你可以用Date.UTC將其轉換爲一個日期對象:

function parseISOUTC(s) { 
    var b = s.split(/\D/); 
    return new Date(Date.UTC(b[0],b[1],b[2],b[3],b[4],b[5])); 
} 
+0

謝謝,這對我們有很大的幫助。那我的數據獲取方法呢,以這種方式獲取數據是否正確? – Kostya

相關問題