5

ajaxを介していくつかのデータをロードし、日付を自動的に解析したいと思います。

var url = "http://example.com/report_containing_dates.json"
jQuery.getJSON(url, function(data_containing_dates_and_strings){
  console.log(date);
});

私のjsonの日付形式は「2012-09-28」(rails to_jsonのデフォルト)ですが、jQueryはこれを文字列として処理します。jqueryが日付として解析するには、日付はどの形式である必要がありますか?

応答例:

{
  "columns": [
    ["date", "Date"],
    ["number", "active_users"],
  ],
  "rows": [
    ["2012-09-28", 120, 98, 60],
    ["2012-09-29", 127, 107, 63]
  ]
}
4

4 に答える 4

6

日付文字列をどのようにフォーマットするかは問題ではありません。JSONメソッドが自動的にオブジェクトに変換することはありませんDate。JSONは、、、、、、、およびの基本的なタイプのみをサポートNumberします。(http://en.wikipedia.org/wiki/JSON)StringBooleanArrayObjectnull

これらの日付文字列を自分でオブジェクトに変換する必要がありDateます。

あなたの場合、それは次のようなものになる可能性があります。

$.each(response.rows, function (idx, row) {

  row[0] = Date.parse(row[0]);
}
于 2012-10-12T13:23:13.643 に答える
3

文字列から日付に変換するDate.parseを使用します。

于 2012-10-12T13:10:28.550 に答える
1

OK、それは予想よりもはるかに困難でしたが、私には解決策があります。

私が採用したアプローチは、ajaxリクエストでカスタムデータ型を要求してから、カスタムコンバーターを実装することです。

まず、jsonの日付に使用している形式はdate( "yyyy-mm-dd")で、元の例は次のようになります。

{
  "columns": [
    ["date", "Date"],
    ["number", "active_users"],
  ],
  "rows": [
    ["date(2012-09-28)", 120, 98, 60],
    ["date(2012-09-29)", 127, 107, 63]
  ]
}

次に、コンバーターを登録して、テキストをjson_with_datesというカスタムデータ型に変換します。正規表現は、日付形式を検索し、それらをステートメントに置き換えて日付オブジェクトを作成するために使用されます。次に、Evalを使用してjsonを構築します。

jQuery.ajaxSetup({
  converters: {
    "text json_with_dates": function( text ) {

      var with_dates = text.replace(/\"date\(([^)]*)\)\"/g, function(a, date){
        var dateParts = date.split("-");
        return "new Date(" + dateParts[0] + "," + dateParts[1] + "," + dateParts[2] + ")";
      });

      var converted = eval("(" + with_dates + ")");
      return converted;
    }
  }
});

次に、カスタムデータ型のajaxリクエストを作成します。

$.ajax({
    url: div.data('chart'),
    dataType: 'json_with_dates',
    success: function(data_including_dates){
      console.log("win!");
    }
});
于 2012-10-12T14:57:27.923 に答える
0

自分で日付を解析するのが最善かもしれません。期待どおりに文字列から日付を解析しない特定のブラウザで問題が発生しました。文字列で使用する簡単なプロトタイプは次の2012-09-28とおりです。

String.prototype.parseDate = function(){
     var date = this.split("-");
     var yyyy = date[0];
     var mm = date[1];
     var dd = date[2];

     date = new Date(yyyy,mm,dd);
     date.setMonth(date.getMonth()-1); // since Months are 0 based
     return date;
}

console.log(data.rows[0][0].parseDate());
console.log(data.rows[1][0].parseDate());​

同様の質問からの引用:IEJavaScriptの日付解析エラー

Date.parseメソッドは完全に実装に依存します(new Date(string)はDate.parse(string)と同等です)

于 2012-10-12T13:45:55.543 に答える