Hello everybody,
I have a view that contains a date field and when i use the service to show the data, the service automatically return the date in miliseconds.
Is there a way to change that? Cuz the view has the field correctly and i dont know why the service changes the value.
Example: fc_evento: 1417427606000 (in arcgis srv)
It has to show 1/12/14 4:53 (in view)
Thanks
Solved! Go to Solution.
Evelyn,
Sorry an eGridColumn is a custom column type of my eSearch widget. So you need to just remove those references and manually set some values:
private function getDateLbl(item:Object,column:GridColumn):String { var dateMS:Number = Number(item[column.dataField]); var retVal:String = ""; var rVal:String = item[column.dataField]; var dateFormatStr:String; var cuseUTC:Boolean; if(rVal == null){ //do nothing }else{ if (!isNaN(dateMS)){ dateFormatStr = "MM/dd/yy L:NN"; retVal = msToDate(dateMS, dateFormatStr, true); } } return retVal; }
<s:GridColumn id="fc_evento" dataField="fc_evento" headerText="fc_evento" labelFunction="{getDateLbl}"></s:GridColumn>
Evelyn,
It is the standard for ArcGIS Server to return a date as UTC (in milliseconds). You will have to convert that number to a date using code like this:
dateMS: is the millisecond value that you are getting back from ArcGIS Server
dateFormat: is the string representation of the date format that you desire ("MM/dd/yy L:NN").
useUTC: adjusts for timezone offset.
value = msToDate(dateMS, dateFormat, useUTC); private function msToDate(ms:Number, dateFormat:String, useUTC:Boolean):String { var date:Date = new Date(ms); if (date.milliseconds == 999){ // workaround for REST bug date.milliseconds++; } if (useUTC){ date.minutes += date.timezoneOffset; } if (dateFormat){ dateFormatter.dateTimePattern = dateFormat; var result:String = dateFormatter.format(date); if (result){ return result; }else{ return dateFormatter.errorText; } }else{ return date.toLocaleString(); } }
the import for dateFormatter and dateFormatter.dateTimePattern i cannot find them.
I have tried import mx.formatters.DateFormatter;
Another question, i was doing a itemrenderer based on the gridcolumn but i cannot use the function to convert the value.
BTW, im making this for a widget.
Thanks
Evelyn,
So you would assign the datagrid columns labelFunction then.
dgCol.labelFunction = getDateLbl;
import spark.formatters.DateTimeFormatter; private var dateFormatter:DateTimeFormatter = new DateTimeFormatter();
private function getDateLbl(item:Object,column:GridColumn):String { var dateMS:Number = Number(item[column.dataField]); var retVal:String = ""; var rVal:String = item[column.dataField]; var dateFormatStr:String; var cuseUTC:Boolean; if(rVal == null){ //do nothing }else{ if (!isNaN(dateMS)){ //Fix the date format to use the Spark format if(column is eGridColumn){ dateFormatStr = (column as eGridColumn).DateFormat; cuseUTC = (column as eGridColumn).useUTC; } dateFormatStr = dateFormatStr.replace(/D/g, "d").replace(/Y/g, "y"); retVal = msToDate(dateMS, dateFormatStr, cuseUTC); } } return retVal; }
Well, i did what u said, but im still having an issue with the eGridColumn. And i cannot see that is the problem. am I doing something wrong on the widget?
The agregarItems() function get the result for the view (4 fields) (coleccion = new ArrayCollection(featureSet.attributes); and (datos.dataProvider = coleccion;). I need to convert the fc_evento field to a datetime, cuz it is milliseconds.
Grid:
<s:DataGrid id="datos" dataProvider="{coleccion}" resizableColumns="true" sortableColumns="true" contentBackgroundAlpha="1" width="100%" height="90%" visible="true" editable="false" bottom="1">
<s:columns>
<s:ArrayList>
<s:GridColumn id="fc_evento" dataField="fc_evento" headerText="fc_evento"></s:GridColumn>
<s:GridColumn id="gl_ip" dataField="gl_ip" headerText="gl_ip" ></s:GridColumn>
<s:GridColumn id="gl_param_ejec" dataField="gl_param_ejec" headerText="gl_param_ejec" ></s:GridColumn>
<s:GridColumn id="gl_mensaje" dataField="gl_mensaje" headerText="gl_mensaje" ></s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
<s:Button id="BuscarCapex" label="Buscar" click="BuscarCapex_clickHandler(event)"></s:Button>
//Functions
protected function BuscarCapex_clickHandler(event:MouseEvent):void
{
// TODO Auto-generated method stub
//IdentityManager.instance.enabled = true;
agregarItems();
fc_evento.labelFunction = getDateLbl;
}
private function getDateLbl(item:Object,column:GridColumn):String
{
var dateMS:Number = Number(item[column.dataField]);
var retVal:String = "";
var rVal:String = item[column.dataField];
var dateFormatStr:String;
var cuseUTC:Boolean;
if(rVal == null){
//do nothing
}else{
if (!isNaN(dateMS)){
//Fix the date format to use the Spark format
if(column is eGridColumn){
dateFormatStr = (column as eGridColumn).DateFormat;
cuseUTC = (column as eGridColumn).useUTC;
}
dateFormatStr = dateFormatStr.replace(/D/g, "d").replace(/Y/g, "y");
retVal = msToDate(dateMS, dateFormatStr, cuseUTC);
}
}
return retVal;
}
private function msToDate(ms:Number, dateFormat:String, useUTC:Boolean):String
{
var date:Date = new Date(ms);
if (date.milliseconds == 999){ // workaround for REST bug
date.milliseconds++;
}
if (useUTC){
date.minutes += date.timezoneOffset;
}
if (dateFormat){
dateFormatter.dateTimePattern = dateFormat;
var result:String = dateFormatter.format(date);
if (result){
return result;
}else{
return dateFormatter.errorText;
}
}else{
return date.toLocaleString();
}
}
Idk what im doing wrong...
Thanks for ur patience
Evelyn,
Sorry an eGridColumn is a custom column type of my eSearch widget. So you need to just remove those references and manually set some values:
private function getDateLbl(item:Object,column:GridColumn):String { var dateMS:Number = Number(item[column.dataField]); var retVal:String = ""; var rVal:String = item[column.dataField]; var dateFormatStr:String; var cuseUTC:Boolean; if(rVal == null){ //do nothing }else{ if (!isNaN(dateMS)){ dateFormatStr = "MM/dd/yy L:NN"; retVal = msToDate(dateMS, dateFormatStr, true); } } return retVal; }
<s:GridColumn id="fc_evento" dataField="fc_evento" headerText="fc_evento" labelFunction="{getDateLbl}"></s:GridColumn>
Works perfectly. Thanks a lot for ur help