Разница между двумя датами в Adobe Air - PullRequest
0 голосов
/ 07 февраля 2012

Как сравнить разницу в днях (int) между двумя датами, выбранными пользователем, с помощью компонента DateChooser в приложении Adobe Air Desktop с использованием Flex Builder 4.5?

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

Ответы [ 2 ]

1 голос
/ 07 июня 2016

Дата математика во флексах плохо поддерживается, и кажется очень неточной. 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;
}
1 голос
/ 08 февраля 2012
<?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>
...