Flex DateTimeAxis重复的轴标签值

时间:2010-12-02 23:21:30

标签: flex flex4

这个简单的代码将于11月7日在水平dateTimeAxis上的2个位置生成:

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

将日期更改为11月8日和9日,一切都很好....

任何人都有任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

看起来它与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));
}

但是,我宁愿不这样做......

答案 1 :(得分:0)

首先,好的人可以放入整个应用程序代码(方便运行)。

复制并在Flex Builder 3中运行它,它给了我两个日期,11/7/10和11/8/10。你正在寻找的是什么(假设月份是零)。必须是语言环境。

这是第一个日期的调试视图,可能会检查您的详细信息(注意时间偏移)

alt text

答案 2 :(得分:0)

brian bishop提到时区偏移,所以这让我思考。这是一个更简单的应用程序:

<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是夏令时):

alt text

由于某种原因,datetimeaxis与displayLocalTime = true,将d2.date转换为7而不是8。

答案 3 :(得分:0)

我在我的应用程序中使用以下函数进行日期比较,而不是使用新的Date(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));
        }