2012-02-07 16 views
0

Flex Builder 4.5を使用しているAdobe Air DesktopアプリケーションのDateChooserコンポーネントを使用して、ユーザーが選択した2つの日付の日数(int)の違いを比較するにはどうすればよいですか?フレックスでAdob​​e Airの2つの日付の日付の差

import mx.controls.DateChooser; 
import mx.controls.Text; 
private var date1:String; 
date1 = date_from.text; //giving error 1120:Access of undefined property date_form 

答えて

1
<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx"> 
<fx:Script> 
    <![CDATA[ 
     import flash.utils.getTimer; 
     import mx.events.CalendarLayoutChangeEvent; 
     import mx.events.FlexEvent; 
     protected function 
     datechooser_changeHandler(event:CalendarLayoutChangeEvent):void 
     { 
      var dateDiff:Number 
      dateDiff=new Date(dChs1.selectedDate).time-new 
     Date(dChs2.selectedDate).time 
      trace (Math.round((dateDiff/86400000)).toString()) 
     } 
     protected function dChs_initializeHandler(event:FlexEvent):void 
     { 
      var today:Date=new Date() 
      event.target.selectedDate=today 
     } 

    ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<s:layout> 
    <s:VerticalLayout/> 
</s:layout> 
<mx:DateChooser id="dChs1" change="datechooser_changeHandler(event)" 
       initialize="dChs_initializeHandler(event)"> 

</mx:DateChooser> 
<mx:DateChooser id="dChs2" change="datechooser_changeHandler(event)" 
       initialize="dChs_initializeHandler(event)"> 

</mx:DateChooser> 
    </s:WindowedApplication> 
+0

友人に感謝します。わずかな変更とその働きf9 .added 2つの変数private var dateDiff:Number = 0; \t \t \t [Bindable] private var daysDiff:String;そして、いくつかのコードの変更:保護機能datechooser_changeHandler(イベント:CalendarLayoutChangeEvent):DATEDIFF =新しい日付(dChs1.selectedDate).time \t \t \t \t \t \t \t \t \t \t \t { ボイド - 新しい日付(dChs2.selectedDate)。時間; \t \t \t \t daysDiff =(Math.round((dateDiff/86400000))。toString()); \t \t \t} – developer

1

日の数学の悪いサポートされており、非常に不正確に思えます。 Flexは抜け出しの際の言語かもしれませんが、後世のやり方のために残っているコードについては、受け入れられた答えをuser1196374で使用しないでください。彼らの答えは大まかで不正確です。

以下、私はこの目標を実行するために開発したコードを含めました。このコードは、このポストで最初にコードを出発点として使用していました。

免責事項、これは前の機能のすべての欠陥を網羅しているのかどうか、他のカレンダーをうまく処理できるかどうかはわかりません。しかし、それは受け入れられた答えよりもはるかに良い解決策です。

public static function dateDiff(dateA:Date, dateB:Date): int{ 
    var retVal:int = 0; 
     if(dateA != null && dateB!=null) { 
      retVal = roughDateDiff(toMidnightFromUTCDate(dateA),toMidnightFromUTCDate(dateB)); 

     } 
    return retVal; 
} 

private static function roughDateDiff(dateA:Date, dateB:Date): int{ 
    var retVal:int = 0; 
    if(dateA != null && dateB!=null){ 
    if(dateA.time > dateB.time){ 
     var dateDiff:Number = dateA.time - dateB.time; 
     retVal = Math.floor((dateDiff/86400000)); 
    }else{ 
     var dateDiff:Number = dateB.time - dateA.time; 
     retVal = Math.floor((dateDiff/86400000)); 
    } 
    } 
    return retVal; 
} 

private static function toMidnightFromUTCDate(pre:Date):Date{ 
    var post:Date = new Date(pre.toUTCString()); 

    post.setUTCHours(0); 
    post.setUTCMinutes(0); 
    post.setUTCSeconds(0); 
    post.setUTCMilliseconds(0); 

    return post; 
} 
+0

編集のおかげで、投稿前に私の読んで逃した! –

関連する問題