Php数组与日期

时间:2012-11-19 14:54:08

标签: php javascript json

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

输出如下内容:

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

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

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

1 个答案:

答案 0 :(得分:1)

MySQL日期值是字符串。如果将它们存储为纯文本,它们将被视为整数减法,例如

 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日期对象
var d = new Date(1327039200000);