2012-02-07 196 views
0

如何使用Flex Builder 4.5通过Adobe Air Desktop应用程序中的DateChooser组件比较用户选择的两个日期(日期(天))之间的差异?在柔性Adob​​e Air中两个日期之间的日期差异

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。添加两个变量private var dateDiff:Number = 0; \t \t \t [Bindable] private var daysDiff:String;和一些代码的变化:保护功能datechooser_changeHandler(事件:CalendarLayoutChangeEvent):无效 \t \t \t { \t \t \t \t \t \t \t \t DATEDIFF =新的日期(dChs1.selectedDate)。时间 - 新日期(dChs2.selectedDate)。时间 ; \t \t \t \t daysDiff =(Math.round((dateDiff/86400000))。toString()); \t \t \t} – developer 2012-02-08 10:38:26

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

感谢您的编辑,错过了我发布之前的阅读! – 2016-07-15 19:15:58