Как мне отформатировать дату во Flash? - PullRequest
8 голосов
/ 15 сентября 2010

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

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

Ответы [ 5 ]

29 голосов
/ 07 июня 2012

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
2 голосов
/ 15 сентября 2010

Вот простой пример пользовательского формата:

    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 
    } 
1 голос
/ 26 января 2011

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

1 голос
/ 15 сентября 2010

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

0 голосов
/ 06 июня 2012
private static function getTime():String
{
    const d = '.';
    const e = '';
    const s = ':';

    var date:Date = new Date();
    return e.concat(pad(date.hours, 2), s, 
                    pad(date.minutes, 2), s, 
                    pad(date.seconds, 2), d, 
                    pad(date.milliseconds, 3));

    function pad(value:String, length:int):String
    {
        const zero = '0';
        var result:String = value;
        while (result.length < length)
        {
            result = zero.concat(result);
        }
        return result;
    }
}
...