2010-09-15 151 views
8

我可以忽略一些東西,但是Flash/AS3似乎缺少基本的日期格式功能。如何從Date獲得格式化的字符串?有幾個選項,如.toLocaleDateString().toUTCString(),但有點限制,至少可以說。如何在Flash中格式化日期?

那麼,如何在AS3中格式化一個Date對象?

+0

你能舉一個你想如何格式化日期的例子嗎? – JeremyFromEarth 2010-09-15 13:31:25

+0

是的,雖然我不認爲它很重要,因爲體面的dateformatter應該能夠處理各種自定義格式。 我現在想要格式化爲這樣的日期: '2010-09-16T07:28:14 + 00:00' >> '2010.1609.0728' – Sietse 2010-09-16 07:25:32

回答

27

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

幫了太多! – Narek 2013-07-04 16:22:50

+1

您還可以在DateTimeFormatter構造函數中爲第一個參數引入一個方便常量: 'new DateTimeFormatter(LocaleID.DEFAULT);' – 2013-08-06 23:47:41

+3

24小時制:'dtf.setDateTimePattern(「yyyy-MM-dd'at 'HH:mm:ss「);' – Bitterblue 2013-11-07 13:15:41

2

這裏有一個自定義格式的一個簡單的例子:

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

我有點兒希望不必發明自己的車輪。 – Sietse 2010-09-16 07:24:02

+0

也許看看大型框架/庫(as3coreLib,Spring Actionscript1)中可用的不同util類。我不確定你想要做什麼。你只需要格式化程序還是計算器?簡單的谷歌搜索爲我計算Date返回了許多Actionscript 3實用程序類。另外,將Java日期實用程序類轉換爲As3將很簡單。 http://github.com/mikechambers/as3corelib/blob/master/src/com/adobe/utils/DateUtil.as – 2010-09-16 12:38:10

1

不幸的是,我不認爲你是在本機支持方面,可俯瞰東西。有this project這似乎提供了更多的靈活性,但我從來沒有圍繞任何深度的工作,所以我不能擔保。我目前正在從事的項目有500行(計數)DateUtil類作爲結果..

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