2010-09-15 27 views
8

Podría estar pasando por alto algo, pero Flash/AS3 parece estar perdiendo la funcionalidad básica de formato de fecha. ¿Cómo obtengo una cadena formateada de Date? Hay algunas opciones como .toLocaleDateString() y .toUTCString(), pero eso es un poco limitante, por decir lo menos.¿Cómo puedo formatear una fecha en Flash?

Entonces, ¿cómo formateo un objeto Date en AS3?

+0

¿Puede dar un ejemplo de cómo desea formatear la fecha? – JeremyFromEarth

+0

sí, aunque realmente no creo que importe, ya que un formato de fecha decente debería ser capaz de manejar todo tipo de formato personalizado. Actualmente quiero una fecha formateada como esta: '2010-09-16T07: 28: 14 + 00: 00' >> ' 2010.1609.0728' – Sietse

Respuesta

27

Flash Player 10.1 agregó un DateTimeFormatter como parte del paquete flash.globalization. Es flexible pero no está bien documentado.

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

¡Ayudó tanto! – Narek

+1

también puede agregar una constante útil para la primera arg en el constructor DateTimeFormatter: 'new DateTimeFormatter (LocaleID.DEFAULT);' –

+3

formato de 24 horas: 'dtf.setDateTimePattern (" aaaa-MM-dd 'en 'HH: mm: ss ");' – Bitterblue

2

Aquí está un ejemplo simple de un formato personalizado:

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 
    } 
+3

Tenía la esperanza de no tener que inventar mi propia rueda. – Sietse

+0

Tal vez observe diferentes clases de utilidades disponibles en grandes framework/libraries (as3coreLib, Spring Actionscript1). No estoy seguro de lo que le gustaría hacer. ¿Necesita solo formateador o también calculadora? Una simple búsqueda en Google me devolvió muchas clases de utilidad Actionscript 3 para el cálculo de la fecha. Además, la conversión de una clase de utilidad de fecha de Java a As3 sería trivial. http://github.com/mikechambers/as3corelib/blob/master/src/com/adobe/utils/DateUtil.as –

1

Por desgracia, no creo que se están pasando por alto nada en términos de soporte nativo. Hay this project que parece ofrecer un poco más de flexibilidad, sin embargo, nunca me he acostumbrado a trabajar con él en profundidad, así que no puedo garantizarlo. El proyecto en el que estoy trabajando actualmente tiene una clase DateUtil de 500 líneas (y contando) como resultado.

1

Existe la clase mx.formatters.DateFormatter (consulte http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/formatters/DateFormatter.html). Tiene una propiedad formatString para el formateo personalizado. A continuación, puede llamar al format, proporcionando una fecha para obtener una cadena.

+1

Vale la pena señalar que DateFormatter es parte del framework Flex y no está disponible para los proyectos Flash de vanilla a menos que incluye las bibliotecas Flex adecuadas. – marcelebrate

0
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; 
    } 
} 
Cuestiones relacionadas