Time not correct in Datagrid

1484
2
Jump to solution
03-09-2012 06:13 AM
by Anonymous User
Not applicable
Original User: ereed

I have a date field in my attribute table that is being displayed in a datagrid after a query. The Month, Day, Year, and Minute display correctly, but the Hours, or off by 5, and it displays as AM always. I have tried using J, H, K, and L in my format string, but it does not matter. One thing that I noticed that is most likely the cause is that the last three digits of the date value before being converted is either 000 or 999.

For example:

The date value in the attribute table displays as: 4/20/2009 11:09:01 AM.
The unformatted value in the datagrid is: 1240225740999
The formatted value in the datagrid is:  4/20/2009 11:09:01 AM

The date value in the attribute table displays as: 5/20/2009 4:19:56 PM.
The unformatted value in the datagrid is: 1242836398000
The formatted value in the datagrid is:  5/20/2009 9:19:58 AM


Here is the Code:

                        <mx:DateFormatter id="dateFormatter" formatString="MM/DD/YYYY H:NN:SS A"/>

   <mx:DataGrid id="sessionDataGrid" itemClick="selectSession(event)"
       dataProvider="{queryTaskSession.executeLastResult.attributes}"
       scroll="true" width="100%" height="80%" >
    <mx:columns>
     <mx:DataGridColumn dataField="StreetName" width="50" />
     <mx:DataGridColumn dataField="FromTime" width="45" headerText="Time" labelFunction="formatDate"/>
     <mx:DataGridColumn dataField="Direction" width="15" />
     <mx:DataGridColumn dataField="ID" visible="false" width="0"/>
    </mx:columns>
   </mx:DataGrid>

   private function formatDate(item:Object, dgColumn:DataGridColumn):String
   {
    var realDate:Date = new Date(item[dgColumn.dataField]);
    return dateFormatter.format(realDate);
   }

Does anybody have an idea why this is happening?

Thanks,

Ed
0 Kudos
1 Solution

Accepted Solutions
RobertScheitlin__GISP
MVP Emeritus
Ed,

   This is the code I use:

            private var useUTC:Boolean = true;             private function getDateLbl(item:Object,column:DataGridColumn):String             {                 var dateMS:Number = Number(item[column.dataField]);                 var retVal:String = "";                 var rVal:String = item[column.dataField];                 if(rVal == null)                 {                     //do nothing                 }else{                     if (!isNaN(dateMS))                     {                         retVal = msToDate(dateMS, _dateFormat, useUTC);                     }                 }                 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.formatString = dateFormat;                     var result:String = dateFormatter.format(date);                     if (result)                     {                         return result;                     }                     else                     {                         return dateFormatter.error;                     }                 }                 else                 {                     return date.toLocaleString();                 }             }


Don't forget to click the Mark as answer check and to click the top arrow (promote) as shown below:

View solution in original post

0 Kudos
2 Replies
RobertScheitlin__GISP
MVP Emeritus
Ed,

   This is the code I use:

            private var useUTC:Boolean = true;             private function getDateLbl(item:Object,column:DataGridColumn):String             {                 var dateMS:Number = Number(item[column.dataField]);                 var retVal:String = "";                 var rVal:String = item[column.dataField];                 if(rVal == null)                 {                     //do nothing                 }else{                     if (!isNaN(dateMS))                     {                         retVal = msToDate(dateMS, _dateFormat, useUTC);                     }                 }                 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.formatString = dateFormat;                     var result:String = dateFormatter.format(date);                     if (result)                     {                         return result;                     }                     else                     {                         return dateFormatter.error;                     }                 }                 else                 {                     return date.toLocaleString();                 }             }


Don't forget to click the Mark as answer check and to click the top arrow (promote) as shown below:
0 Kudos
by Anonymous User
Not applicable
Original User: ereed

Thanks Robert, that worked.

Ed
0 Kudos