2012-11-19 29 views
-3
$SQLString = "SELECT  
       count(score) as counts, 
       score, month, 
       date FROM persons 
       GROUP BY day, month, year 
      ORDER BY date asc";  

    $result = mysql_query($SQLString); 
    $num = mysql_num_rows($result); 


$data[0] = array('day','counts');  
    for ($i=1; $i<($num+1); $i++) 
    { 
     $data[$i] = array(substr(mysql_result($result, $i-1, "date"), 0, 10), 
      (int) mysql_result($result, $i-1, "counts")); 
    } 
    echo json_encode($data); 

这个输出是这样的:PHP数组与日期

[["day","counts"],["2012-01-20",1],["2012-02-06",1],["2012-11-16",2],["2013-04-13",1]] 

我的问题是,我需要在日期类型,而不是字符串,日期值(如“2012-01-20”)。

我真的需要你的帮助...

+1

使用'http://www.php.net/manual/en/datetime.createfromformat .php'和'http:// www.php.net/manual/en/datetime.format.php' –

+0

你可以通过MYSQL或http://php.net/manual/en/function.strtotime.php –

回答

1

MySQL日期值ARE字符串。如果将它们存储为明文,则它们会被视为整数相减,例如,

2012-01-02 -> 2012 minus 1 minus 2 -> 2009 

JavaScript没有本机“日期”字符串。只有Date对象,它不能用JSON字符串表示。如果您需要整数,则必须将它们存储为unix时间戳,例如

2012-01-20 00:00:00 -> 1327039200 

但是请注意,JavaScript使用毫秒为单位的时间戳值,所以你需要

1327039200000 

的值通过。

请注意,您的代码效率非常低。 mysql_result非常慢,并且很难处理。你可以简单的事情大大有

$sql = "SELECT COUNT(score) AS counts, unix_timestamp(yourdatefield) AS timestamp ..."; 

$data = array(); 
while($row = mysql_fetch_assoc($result)) { 
    $timestamp = $row['timestamp']; 
    $data[] = array($row['counts'], $row['timestamp'] * 1000); 
} 
echo json_encode($data); 

,那么你可以将这些时间戳有JS Date对象与

var d = new Date(1327039200000); 
+0

感谢您的帮助,有没有办法只显示YMD? – pleaseDeleteMe

+0

或者从mysql传递原始字符串,或者使用Date对象格式化时间戳,例如, 'Date.getMonth()':https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date –