Actionscript 3 flex自定义组件中的日期时间格式更改

Actionscript 3 flex自定义组件中的日期时间格式更改,actionscript-3,apache-flex,custom-component,Actionscript 3,Apache Flex,Custom Component,im使用自定义组件作为日期时间,它是12小时和am/pm格式, 现在我想用数字步进显示24小时格式,am/pm应该被禁用。你知道吗 这是我的密码 <mx:Script> <![CDATA[ [Bindable] private var _selectedDate:Date = new Date(); [Bindable] [Inspectable(defaultValue='5', category="Other", enumerati

im使用自定义组件作为日期时间,它是12小时和am/pm格式, 现在我想用数字步进显示24小时格式,am/pm应该被禁用。你知道吗

这是我的密码

<mx:Script>
    <![CDATA[

        [Bindable] private var _selectedDate:Date = new Date();
        [Bindable] [Inspectable(defaultValue='5', category="Other", enumeration="1,5,10,15,30")] 

        public var minuteIncrement:int = 1;


        public function get selectedDate():Date
        {
            var rtnVal:Date = null; 
            if(this.date.text != "")
            {
                this.validateNow();
                rtnVal = this._selectedDate;
            }
            return rtnVal;
        }
        private function getVisible(flg:Boolean):void
        {
            if(!flg)
            {
                //Invisible
                hours.visible = false;
                lbl.visible = false;
                minutes.visible = false;
                am.visible = false;
                pm.visible = false;
            }
            else
            {
                //Visible
                hours.visible = true;
                lbl.visible = true;
                minutes.visible = true;
                am.visible = true;
                pm.visible = true;
            }
        }
        public function clearDate():void
        {
            selectedDate = new Date();
            date.selectedDate = null;
            getVisible(false);
        }

        [Bindable]
        public function set selectedDate(value:Date):void
        {
            if(value != null)
            {
                this._selectedDate = value
                this.date.selectedDate = this._selectedDate
                if(value.getHours() >= 12)
                {
                    this.ampm.selectedValue = 2;
                }
                else
                {
                    this.ampm.selectedValue = 1;
                }

                if(value.getHours() < 13 )
                    this.hours.value = value.getHours()
                else
                    this.hours.value = value.getHours() - 12

                if(value.getHours() == 0)
                    this.hours.value = 12;
                this.minutes.value = value.getMinutes()
                this.validateNow();
                getVisible(true);
            }
            else
            {
                clearDate();
            }
        }

        override public function validateProperties():void
        {
            super.validateProperties();

        }

        public function handleChange():void
        {
            getVisible(true);
            if(this.date.text != "")
            {
                var militaryHours:int = hours.value;
                if(ampm.selectedValue == 2 && hours.value != 12)
                    militaryHours = hours.value+12; 
                else if(ampm.selectedValue == 1 && hours.value == 12)
                    militaryHours = 0;
                var selDate:Date = this.date.selectedDate;
                var date:Date = new Date(
                    selDate.getFullYear(),
                    selDate.getMonth(),
                    selDate.getDate(),
                    militaryHours,
                    minutes.value)
                this.selectedDate = date;

                this.invalidateProperties();
                this.validateNow();
                this.dispatchEvent(new Event("change"));
            }
        }
    ]]>
</mx:Script>
<mx:DateField id="date" selectedDate="{new Date()}" change="handleChange()" formatString="DD/MM/YYYY"/>
<mx:Spacer width="10"/>
<mx:NumericStepper id="hours" minimum="1" maximum="12" stepSize="1" width="40" change="handleChange()" valueCommit="handleChange()" textAlign="center"/>
<mx:Label id="lbl" text=":" textAlign="center"/>
<mx:NumericStepper id="minutes" minimum="0"  maximum="59" stepSize="{minuteIncrement}" change="handleChange()" valueCommit="handleChange()" textAlign="center" width="40"/>
<mx:Spacer width="10"/>
<mx:RadioButtonGroup id="ampm" selectedValue="1" change="this.handleChange()"/>
<mx:RadioButton id="am" value="1" label="AM" group="{ampm}"/>
<mx:RadioButton id="pm" value="2" label="PM" group="{ampm}"/>

= 12)
{
this.ampm.selectedValue=2;
}
其他的
{
this.ampm.selectedValue=1;
}
if(value.getHours()<13)
this.hours.value=value.getHours()
其他的
this.hours.value=value.getHours()-12
if(value.getHours()==0)
此.hours.value=12;
this.minutes.value=value.getMinutes()
这是validateNow();
getVisible(true);
}
其他的
{
clearDate();
}
}
重写公共函数validateProperties():void
{
super.validateProperties();
}
公共函数handleChange():void
{
getVisible(true);
如果(this.date.text!=“”)
{
var军事小时数:int=hours.value;
如果(ampm.selectedValue==2&&hours.value!=12)
军事小时=小时。值+12;
else if(ampm.selectedValue==1&&hours.value==12)
军事小时数=0;
var selDate:Date=this.Date.selectedDate;
变量日期:日期=新日期(
selDate.getFullYear(),
selDate.getMonth(),
selDate.getDate(),
军事时间,
分钟(价值)
this.selectedDate=日期;
这是无效的属性();
这是validateNow();
此事件(新事件(“变更”));
}
}
]]>

提前超过XXXXXX

向组件添加新属性以控制格式的更改。有很多方法可以做到这一点

我可能会添加一个名为“Format”的公共变量,它接受字符串值。我将这些字符串值存储在常量中,如下所示:

public var const TWENTY_FOUR_HOUR_FORMAT : String = "twentyFourHourFormat";
public var const TWELVE_HOUR_FORMAT : String = "twelveourFormat";
然后选择“格式”属性:

private var _Format : String = TWELVE_HOUR_FORMAT;
protected function get format():String{
 return _Format;
}
protected function set format(value:String){
 if(format == TWENTY_FOUR_HOUR_FORMAT){
   hours.max = 24;
   am.visible = false;
   pm.visible = false;
 } else {
   hours.max = 12;
   am.visible = true
   pm.visible = true;
}

对于更高级的东西,您可以使用组件livecycle,在set方法中使属性和显示列表无效。然后可能在commitProperties()中设置“hours.max”值,并在updateDisplayList()中设置am.visible和pm.visible属性

向组件添加新属性以控制格式的更改。有很多方法可以做到这一点

我可能会添加一个名为“Format”的公共变量,它接受字符串值。我将这些字符串值存储在常量中,如下所示:

public var const TWENTY_FOUR_HOUR_FORMAT : String = "twentyFourHourFormat";
public var const TWELVE_HOUR_FORMAT : String = "twelveourFormat";
然后选择“格式”属性:

private var _Format : String = TWELVE_HOUR_FORMAT;
protected function get format():String{
 return _Format;
}
protected function set format(value:String){
 if(format == TWENTY_FOUR_HOUR_FORMAT){
   hours.max = 24;
   am.visible = false;
   pm.visible = false;
 } else {
   hours.max = 12;
   am.visible = true
   pm.visible = true;
}
对于更高级的东西,您可以使用组件livecycle,在set方法中使属性和显示列表无效。然后可能在commitProperties()中设置“hours.max”值,并在updateDisplayList()中设置am.visible和pm.visible属性

还有一件事,当您从datefield中选择任何日期时,您将获得时间00:00:00。。。 如果你也需要当前时间,那么你可以简单地创建一个日期对象并获取小时和分钟,这也会给你当前时间

在下面的代码中类似

this.selectedDate = date;

                var date1:Date = new Date();

                hours.value = date1.hours;
                minutes.value = date1.minutes;

                this.invalidateProperties();
                this.validateNow();
                this.dispatchEvent(new Event("change"));
还有一件事,当您从datefield中选择任何日期时,您将获得时间00:00:00。。。 如果你也需要当前时间,那么你可以简单地创建一个日期对象并获取小时和分钟,这也会给你当前时间

在下面的代码中类似

this.selectedDate = date;

                var date1:Date = new Date();

                hours.value = date1.hours;
                minutes.value = date1.minutes;

                this.invalidateProperties();
                this.validateNow();
                this.dispatchEvent(new Event("change"));

您想删除12小时格式的功能吗?@Sagar Rawal yeah..我需要禁用24小时格式和am pm。所以您想在日期字段中显示当前日期,在时间字段中显示当前时间?第一步是小时,第二步是分钟?我是对的还是错的?@Sagar Rawal yeah tats rite..我已经更改了代码并编辑了我的答案,请检查一下…你想删除12小时格式的功能吗?@Sagar Rawal yeah..我需要禁用24小时格式和Am pm。那么你想在日期字段中显示当前日期,在时间字段中显示当前时间?第一步是小时,第二步是分钟?我是对还是错?@Sagar Rawal yeah tats rite.。我已经更改了代码并编辑了我的答案,请检查一下……是的,我将数字步进最大值更改为24。日期正在更改数字步进器没有更改..是的,我将数字步进器最大值更改为24。日期正在更改,数字步进器不会更改。。