2010-12-02 12 views
0

diesem einfachen Code führt 7. November in 2 Plätze auf der horizontalen DateTimeAxis:Flex DateTimeAxis Doppelte Achsenbeschriftung Werte

<mx:Application 
     xmlns:mx="http://www.adobe.com/2006/mxml"> 

    <mx:Script> 
     <![CDATA[ 
      import mx.charts.series.LineSeries; 
      import mx.collections.ArrayCollection; 

      [Bindable] 
      public var ac:ArrayCollection = new ArrayCollection(
       [ 
        {completions: "11636", date: new Date(2010, 10, 7)}, 
        {completions: "33060", date: new Date(2010, 10, 8)}, 
       ]); 
     ]]> 
    </mx:Script> 

    <mx:Panel title="Bar Chart"> 
     <mx:BarChart id="myChart" 
         dataProvider="{ac}"> 
      <mx:horizontalAxis> 
       <mx:DateTimeAxis dataUnits="days" 
           displayLocalTime="true"/> 
      </mx:horizontalAxis> 
      <mx:series> 
       <mx:LineSeries xField="date" yField="completions"/> 
      </mx:series> 
     </mx:BarChart> 
    </mx:Panel> 
</mx:Application> 

ändern die Tage bis zum 8. November und 9. und alles ist gut ....

Hat jemand irgendwelche Ideen, wie man das beheben kann?

+0

FYI - ich bin mit dem 4.1 SDK –

Antwort

0

Es sieht so aus, es hat etwas mit der UTC-Zeit zu tun, wie dies behebt es:

<mx:DateTimeAxis dataUnits="days" displayLocalTime="true" labelFunction="formatDate"/> 

public function formatDate(value:Date, prev:Date, axis:IAxis):String 
{ 
    return dateFormatter.format(new Date(value.fullYear, value.month, value.dateUTC)); 
} 

Aber, würde ich lieber nicht tun ...

0

Zum einen guten Mann für die Umsetzung in der gesamte App-Code (praktisch zum Ausführen).

Kopierte es und lief es in Flex Builder 3, und es gab mir die zwei Daten, 11/7/10 und 11/8/10. Welches ist, was Sie gesucht haben (da dieser Monat auf Null basiert). Muss eine Gebietssache sein.

Hier ist eine Debug-Ansicht des ersten Datum, überprüfen Sie vielleicht Details gegen deins (beachten Sie die Zeitverschiebung)

alt text

+0

i posted ein paar mehr Infos in Form einer anderen Antwort. Dies scheint ein Problem mit der Sommerzeit zu sein, da die Sommerzeit am 11/7 stattfand. 11/7 hat eine timezoneoffset = 360, wohingegen 11/8 eine timezoneoffset = 420 hat .... immer noch nicht sicher, wie es zu beheben ist ... aber danke für den zusätzlichen Hinweis ... –

0

brian Bischof Offset-Zeitzone erwähnt, so dass bekam dachte ich. hier ist ein einfacher App:

<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" minWidth="955" minHeight="600" 
       creationComplete="application1_creationCompleteHandler(event)"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 

      protected function application1_creationCompleteHandler(event:FlexEvent):void 
      { 
       var d1:Date = new Date(2010, 10, 7); 
       var d2:Date = new Date(2010, 10, 8); 
       // put breakpoint here... 
      } 
     ]]> 
    </fx:Script>  

</s:Application> 

und hier ist es, was die Eigenschaften wie auf meiner Maschine aussehen (in Denver) (. beachten Sie die timezoneoffset Eigenschaft der Unterschied i vermuten, da 11/7 Sommer Tag war):

alt text

aus irgendeinem Grunde DateTimeAxis mit displayLocalTime = true, wandelt d2.date bis 7 statt 8

0

ich die unten Funktion für Datum Vergleich in meiner Anwendung verwenden stattdessen neues Datum von (obj) und es hat funktioniert f oder ich.Sie können es auch versuchen! Hinweis: 'Wert' Parameter war ein String "02/07/2011" in meinem Fall.

private function isoToDate(value:String):Date 
     { 
      var dateStr:String=value; 
      dateStr=dateStr.replace(/\-/g, "/"); 
      dateStr=dateStr.replace("T", " "); 
      dateStr=dateStr.replace("Z", " GMT-0000"); 
      dateStr=dateStr.substr(0, dateStr.lastIndexOf("/")); 
      return new Date(Date.parse(dateStr)); 
     }