Как отформатировать дату во Flash?

Я мог что-то упустить, но во Flash / AS3, похоже, отсутствуют базовые функции форматирования даты. Как мне получить отформатированную строку из Date? Есть несколько вариантов, таких как .toLocaleDateString() и .toUTCString(), но это, мягко говоря, немного ограничивает.

Итак, как мне отформатировать объект Date в AS3?


person Sietse    schedule 15.09.2010    source источник
comment
Можете ли вы привести пример того, как вы хотите отформатировать дату?   -  person JeremyFromEarth    schedule 15.09.2010
comment
да, хотя я не думаю, что это имеет значение, поскольку приличный форматер даты должен уметь обрабатывать все виды настраиваемого формата. Сейчас мне нужен формат даты: 2010-09-16T07:28:14+00:00 ›› 2010.1609.0728   -  person Sietse    schedule 16.09.2010


Ответы (4)


Flash Player 10.1 добавил DateTimeFormatter как часть пакета flash.globalization. Это гибко, но плохо документировано.

import flash.globalization.DateTimeFormatter;

var d:Date = new Date();
var dtf:DateTimeFormatter = new DateTimeFormatter("en-US");
dtf.setDateTimePattern("yyyy-MM-dd 'at' hh:mm:ssa");
trace(dtf.format(d)); 

// 2012-06-06 at 09:58:46PM
person T Graham    schedule 07.06.2012
comment
вы также можете просто добавить удобную константу для первого аргумента в конструкторе DateTimeFormatter: new DateTimeFormatter(LocaleID.DEFAULT); - person matt lohkamp; 07.08.2013
comment
24-часовой формат: dtf.setDateTimePattern("yyyy-MM-dd 'at' HH:mm:ss"); - person Bitterblue; 07.11.2013
comment
Документы здесь: help.adobe.com/en_US / FlashPlatform / reference / actionscript / 3 / - person weotch; 23.11.2013

Вот простой пример настраиваемого формата:

    public static function getDateIso8601Long(date:Date):String {
        var str:String = date.getFullYear().toString()
        str = str +"-"+ ((String((date.getMonth()+1)).length == 1)?"0"+(date.getMonth()+1):(date.getMonth()+1)).toString()
        str = str +"-"+ ((date.getDate().toString().length == 1)?"0"+date.getDate():date.getDate()).toString()
        str = str +"T"+ ((date.getHours().toString().length == 1)?"0"+date.getHours():date.getHours()).toString()
        str = str +":"+ ((date.getMinutes().toString().length == 1)?"0"+date.getMinutes():date.getMinutes()).toString()
        str = str +":"+ ((date.getSeconds().toString().length == 1)?"0"+date.getSeconds():date.getSeconds()).toString()
        var ms:String = date.getMilliseconds().toString()
        while (ms.length < 3)
            ms = "0"+ms
        str = str+"."+ms
        var offsetMinute:Number = date.getTimezoneOffset()
        var direction:Number = (offsetMinute<0)?1:-1
        var offsetHour:Number = Math.floor(offsetMinute/60)
        offsetMinute = offsetMinute-(offsetHour*60)

        var offsetHourStr:String = offsetHour.toString()
        while (offsetHourStr.length < 2)
            offsetHourStr = "0"+offsetHourStr
        var offsetMinuteStr:String = offsetMinute.toString()
        while (offsetMinuteStr.length < 2)
            offsetMinuteStr = "0"+offsetMinuteStr
        str = str+((direction == -1)?"-":"+")+offsetHourStr+":"+offsetMinuteStr
        return str 
    } 
person Guillaume Malartre    schedule 15.09.2010
comment
Я как бы надеялся, что мне не придется изобретать собственное колесо. - person Sietse; 16.09.2010
comment
Возможно, посмотрите на другой класс util, доступный в больших фреймворках / библиотеках (as3coreLib, Spring Actionscript1). Я не уверен, что бы вы хотели сделать. Вам нужен только форматтер или калькулятор? Простой поиск в Google вернул мне множество служебных классов Actionscript 3 для расчета даты. Кроме того, преобразование служебного класса Java Date в As3 было бы тривиальным. github.com/mikechambers/as3corelib/blob/ master / src / com / adobe / - person Guillaume Malartre; 16.09.2010

К сожалению, я не думаю, что вы что-то упускаете из виду с точки зрения нативной поддержки. Существует этот проект, который, кажется, предлагает немного большую гибкость, однако я никогда не собирался работать с это на любой глубине, поэтому я не могу за это поручиться. В результате у проекта, над которым я сейчас работаю, есть класс DateUtil из 500 строк (и их количество постоянно растет).

person DannyC    schedule 15.09.2010

Существует класс mx.formatters.DateFormatter (см. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/formatters/DateFormatter.html). У него есть свойство formatString для настраиваемого форматирования. Затем вы можете вызвать format, указав дату для получения строки.

person Eric Smith    schedule 26.01.2011
comment
Стоит отметить, что DateFormatter является частью инфраструктуры Flex и недоступен для обычных Flash-проектов, если вы не включили соответствующие библиотеки Flex. - person marcelebrate; 11.09.2011