YJQDateField.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:HGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
horizontalAlign="left"
width="176" height="22">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.controls.DateField;
import mx.core.FlexGlobals;
import mx.core.INavigatorContent;
import mx.formatters.DateFormatter;
import mx.managers.PopUpManager;
[Bindable]
/**
* 控件是否可以直接输入日期
*/
public var editable:Boolean;
[Bindable]
/**
* 日期格式 YYYY MM DD HH NN SS
*/
public var formatString:String ="YYYY-MM-DD HH:NN:SS";
[Bindable]
private var _date:Date = new Date();
private var _year:int=0,_month:int=0,_day:int=0,_hour:int=0,_minute:int=0,_second:int=0;
/**
* 设置显示日期字符串
*/
public function set text(value:String):void
{
_date=DateFormatter.parseDateString(value);
}
/**
* 设置日期
*/
public function set date(value:Date):void
{
_year = value.fullYear;
_month = value.month;
_day =value.day;
_minute=value.minutes;
_hour=value.hours;
_second=value.seconds;
_date = value;
}
/**
* 获取控件时间
*/
public function get date():Date
{
return _date;
}
/**
* 获取Chooser日期
*/
public function onGetDate(y:int,mo:int,d:int,h:int,mi:int,s:int):void
{
this._year=y;
this._month = mo;
this._day = d;
this._hour = h;
this._minute = mi;
this._second = s;
_date = new Date(_year,_month,_day,_hour,_minute,_second);
_inSelected = false;
}
private var _inSelected:Boolean = false;
/**
* 选择年月日
*/
protected function chooseDate_LBtn_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
if(_inSelected == true)
return ;
var dateChooser:YJQChooseDate = new YJQChooseDate();
dateChooser.setDate(date.fullYear,date.month,date.date,date.hours,date.minutes,date.seconds);
dateChooser.onReturnTime = onGetDate;
dateChooser.cancelHandler = function():void
{
_inSelected = false;
}
dateChooser.x = event.stageX;
dateChooser.y = event.stageY;
PopUpManager.addPopUp(dateChooser,FlexGlobals.topLevelApplication as DisplayObject);
_inSelected = true;
}
private function DateToString(d:Date,format:String):String
{
//YYYY-MM-DD HH:NN:SS
var str:String = format;
str=str.replace("YYYY",d.fullYear);
str = str.replace("MM",d.month+1);
str=str.replace("DD",d.date);
str=str.replace("HH",d.hours);
str=str.replace("NN",d.minutes);
str=str.replace("SS",d.seconds);
return str;
}
override public function toString():String
{
return DateToString(_date,formatString);
}
]]>
</fx:Script>
<s:TextInput id="date_input" text="{DateToString(_date,formatString)}" height="100%" width="100%" />
<mx:LinkButton label=">>" id="chooseDate_LBtn" click="chooseDate_LBtn_clickHandler(event)" />
</s:HGroup>
YJQChooseDate.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:BorderContainer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="200" maxWidth="200"
minHeight="260" maxHeight="260"
width="200" height="260">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
import mx.managers.PopUpManager;
/**
* year month day hour minute second
*/
public var onReturnTime:Function;
[Bindable]
private var _hour:int = 0;
[Bindable]
private var _minute:int =0;
[Bindable]
private var _second:int =0;
private var _year:int,_month:int,_day:int;
/**
* 设置日期
*/
public function setDate(year:int,month:int,day:int ,hour:int,minute:int,second:int):void
{
_year=year;
_month=month;
_day=day;
_hour = hour;
_minute=minute;
_second=second;
}
/**
* 输入小时是否合理
*/
protected function hour_focusOutHandler(event:FocusEvent):void
{
if(isNaN(Number(hour.text)))
{
hour.text=_hour.toString();
return;
}
_hour = int(hour.text);
if(_hour<0)
_hour=0;
else if(_hour>23)
_hour=23;
hour.text = _hour.toString();
}
/**
* 输入分钟是否合理
*/
protected function minute_focusOutHandler(event:FocusEvent):void
{
if(isNaN(Number(minute.text)))
{
minute.text=_minute.toString();
return;
}
_minute = int(minute.text);
if(_minute<0)
_minute=0;
else if(_minute>59)
_minute=59;
minute.text = _minute.toString();
}
/**
* 输入秒是否合理
*/
protected function second_focusOutHandler(event:FocusEvent):void
{
if(isNaN(Number(second.text)))
{
second.text=_second.toString();
return;
}
_second = int(second.text);
if(_second<0)
_second=0;
else if(_second>59)
_second=59;
second.text = _second.toString();
}
/**
* 双击代表选择
*/
protected function vgroup1_doubleClickHandler(event:MouseEvent):void
{
ok_clickHandler(null);
}
/**
* 返回日期
*/
protected function ok_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
var date:Date = dateChosser.selectedDate;
onReturnTime(date.fullYear,date.month,date.day,_hour,_minute,_second);
try
{
PopUpManager.removePopUp(this);
}
catch(error:Error)
{
this.parent.removeChild(this);
}
}
public var cancelHandler:Function;
/**
* 取消日期选择
*/
protected function cancel_clickHandler(event:MouseEvent):void
{
try
{
PopUpManager.removePopUp(this);
}
catch(error:Error)
{
this.parent.removeChild(this);
}
cancelHandler();
}
/**
* DateChooser加载完成后执行
*/
protected function dateChosser_creationCompleteHandler(event:FlexEvent):void
{
// TODO Auto-generated method stub
dateChosser.selectedDate .setFullYear(_year,_month,_day);
}
]]>
</fx:Script>
<s:VGroup width="100%" height="100%" >
<mx:DateChooser width="100%" id="dateChosser" >
</mx:DateChooser>
<s:HGroup paddingTop="0" paddingLeft="10" width="100%" horizontalAlign="left">
<s:TextInput id="hour" width="23" text="{this._hour.toString()}" focusOut="hour_focusOutHandler(event)" />
<s:Label paddingTop="4" text="时:" />
<s:TextInput id="minute" width="21" text="{this._minute.toString()}" focusOut="minute_focusOutHandler(event)"/>
<s:Label paddingTop="4" text="分:" />
<s:TextInput id="second" width="22" text="{this._second.toString()}" focusOut="second_focusOutHandler(event)"/>
<s:Label paddingTop="4" text="秒:" />
</s:HGroup>
<s:HGroup width="100%" horizontalCenter="true" >
<s:Button label="确定" id="ok" click="ok_clickHandler(event)" />
<mx:Spacer width="100%" />
<s:Button label="取消" id="cancel" click="cancel_clickHandler(event)" />
</s:HGroup>
</s:VGroup>
</s:BorderContainer>
测试文件
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="application1_creationCompleteHandler(event)"
xmlns:supportClasses="com.esri.ags.skins.supportClasses.*"
minWidth="955" minHeight="600" xmlns:YJQDateField="YJQDateField.*">
<s:layout>
<supportClasses:AttachmentLayout/>
</s:layout>
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.formatters.DateFormatter;
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
// TODO Auto-generated method stub
var date:Date = DateFormatter.parseDateString("2011-08-06 14:21:25");
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<YJQDateField:YJQDateField />
</s:Application>