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

これは次のようなものを出力します:

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

私の問題は、文字列ではなく日付型にその日付値( "2012-01-20"など)が必要なことです。

私は本当にあなたの助けが必要です...

4

1 に答える 1

1

MySQLの日付値は文字列です。それらを平文として保存した場合、それらは整数の減算として表示されます。

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

Javascriptにはネイティブの「日付」文字列はありません。JSON文字列で表すことができないDateオブジェクトのみがあります。整数が必要な場合は、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);
于 2012-11-19T15:00:00.913 に答える