2012-04-18 14 views
1

私が作業しているアプリケーションでは、ユーザーは特定の日のログを作成できます。特定の日付範囲に基づいて情報を取り戻そうとしています。Flex Mobile 4.6 Flex/Flash Builderまたはデバイス内でSqliteの日付範囲クエリが機能しない

ここで(この記事の目的のためにスリム化)テーブルを作成するコードです:ここだ

INSERT INTO TimeLogged (LogDate) VALUES (date('2012-01-14')); 

CREATE TABLE IF NOT EXISTS TimeLogged(
    ... 
    LogDate DATE NOT NULL 
); 

テーブルに日付を挿入するために使用されるコードは、クエリ私は日付範囲を取得するために使用しています:

SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN date('2012-01-01') AND date('2012-04-16') 

これは、完全にSqliteコマンドウィンドウから動作します。私はPIXを投稿するにはあまりにも新しいですので、ここでのリンクです: Sqlite Command Window

ここで私は結果を取り戻すためのFlex/Flash Builderの4.6で使用するコードは次のとおりです。

  var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = SQLCom.SQLCon; 
      stmt.text = "SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN date('2012-01-01') AND date('2012-04-16')"; 
      try{ 
       stmt.execute(); 
      } 
      catch(err:SQLError){ 
       trace(err.details); 
      } 

      var a:ArrayCollection = new ArrayCollection(stmt.getResult().data); 

      trace("a.length: " + a.length); 

      for(var i:int = 0; i < a.length; ++i) 
       trace("a[" + i + "]: " + a[i].LogDate); 

私もかかわらず、バックは結果を取得していません複数のレコードがあります。 Flex/Flash Builder Console output

は私の問題にいくつかの光を当てることができます誰にも事前にありがとうございます。ここでは

は、私は声明BETWEEN/WHEREを削除するとき、私はコンソール出力で得るものです。

答えて

1

私は何かを見つけました。 (次のように

var d:Date = new Date(); 
d.setTime(d.getTime() - (86400000 * 7));// first day is one week prior 

var d1:Number = UTCToJulianDay(d); 
var d2:Number = UTCToJulianDay(new Date()); 

だから、日付オブジェクトがちょうどクエリに入る:その後、私はちょうど機能を介して各日付オブジェクトを実行

protected function UTCToJulianDay(d:Date):Number { 
    return (((d.time - (d.getTimezoneOffset() * 60000))/86400000) + 2440587.5); 
} 

:私はユリウス日にUTCの日を変換する関数を作成しました完全なコードについては、元の投稿を参照してください):

stmt.text = "SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN " + d1 + " AND " + d2; 
関連する問題