Flex DateTimeAxis Значения дубликата оси дублирования - PullRequest
0 голосов
/ 03 декабря 2010

Этот простой код приводит к 7 ноября в двух местах по горизонтали dateTimeAxis:

<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>

Измените даты на 8 и 9 ноября, и все хорошо ....

Всеместь идеи как это исправить?

Ответы [ 4 ]

0 голосов
/ 07 февраля 2011

Я использовал приведенную ниже функцию сравнения дат в своем приложении вместо новой даты (obj), и она сработала для меня. Вы также можете попробовать! Примечание. Параметр 'value' в моем случае представлял собой строку "02/07/2011".

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));
        }
0 голосов
/ 03 декабря 2010

Во-первых, хороший человек для вставки всего кода приложения (удобно для запуска).

Скопировал и запустил его в Flex Builder 3, и он дал мне две даты, 11/7/10 и 11/8/10.Что именно вы искали (учитывая, что месяц основан на нуле).Должно быть, дело в локали.

Вот отладочное представление первой даты, может быть, сверяем детали с вашим (обратите внимание на смещение времени)

alt text

0 голосов
/ 03 декабря 2010

Брайан епископ упомянул смещение часового пояса, так что это заставило меня задуматься.вот более простое приложение:

<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>

и вот как выглядят свойства на моей машине (в Денвере) (обратите внимание на свойство timezoneOffset. Разница, которую я подозреваю, заключается в том, что 11/7 было днем ​​летнего времени):1004 *

alt text

по некоторым причинам, datetimeaxis с displayLocalTime = true, преобразует d2.date в 7 вместо 8.

0 голосов
/ 03 декабря 2010

Похоже, что это связано с временем UTC, поскольку это исправляет это:

<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));
}

Но я бы предпочел не делать этого ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...