Adobe Air 中两个日期之间的日期差异

发布于 2025-01-03 10:09:20 字数 289 浏览 5 评论 0原文

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

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

How to compare the days(int) difference between two dates chosen by user, via DateChooser component in Adobe Air Desktop application using 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里兽 2025-01-10 10:09:20
<?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>
<?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>
私藏温柔 2025-01-10 10:09:20

Flex 中的日期数学支持很差,而且看起来非常不准确。 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;
}

Date math in flex is poorly supported, and very inaccurate it seems. Flex might be a language on the way out but for posterity sake and any legacy code which might hang around, please do not use the accepted answer by user1196374. Their answer is rough and very inaccurate.

Below I have included code I developed to perform the stated goal, which had initially used his code in this post as a starting point.

Disclaimer, I don't know if this covers every flaw in the previous function, nor do I know if it will handle other calendars well. It is however a vastly better solution than the accepted answer.

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文