我可以忽略一些東西,但是Flash/AS3似乎缺少基本的日期格式功能。如何從Date
獲得格式化的字符串?有幾個選項,如.toLocaleDateString()
和.toUTCString()
,但有點限制,至少可以說。如何在Flash中格式化日期?
那麼,如何在AS3中格式化一個Date
對象?
我可以忽略一些東西,但是Flash/AS3似乎缺少基本的日期格式功能。如何從Date
獲得格式化的字符串?有幾個選項,如.toLocaleDateString()
和.toUTCString()
,但有點限制,至少可以說。如何在Flash中格式化日期?
那麼,如何在AS3中格式化一個Date
對象?
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
幫了太多! – Narek 2013-07-04 16:22:50
您還可以在DateTimeFormatter構造函數中爲第一個參數引入一個方便常量: 'new DateTimeFormatter(LocaleID.DEFAULT);' – 2013-08-06 23:47:41
24小時制:'dtf.setDateTimePattern(「yyyy-MM-dd'at 'HH:mm:ss「);' – Bitterblue 2013-11-07 13:15:41
這裏有一個自定義格式的一個簡單的例子:
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
}
我有點兒希望不必發明自己的車輪。 – Sietse 2010-09-16 07:24:02
也許看看大型框架/庫(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
不幸的是,我不認爲你是在本機支持方面,可俯瞰東西。有this project這似乎提供了更多的靈活性,但我從來沒有圍繞任何深度的工作,所以我不能擔保。我目前正在從事的項目有500行(計數)DateUtil類作爲結果..
有mx.formatters.DateFormatter
類(請參閱http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/formatters/DateFormatter.html)。它具有用於自定義格式的formatString
屬性。然後您可以撥打format
,提供一個日期以獲取字符串。
值得注意的是,DateFormatter是Flex框架的一部分,並且不適用於vanilla Flash項目,除非您包含適當的Flex庫。 – marcelebrate 2011-09-11 14:01:27
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;
}
}
你能舉一個你想如何格式化日期的例子嗎? – JeremyFromEarth 2010-09-15 13:31:25
是的,雖然我不認爲它很重要,因爲體面的dateformatter應該能夠處理各種自定義格式。 我現在想要格式化爲這樣的日期: '2010-09-16T07:28:14 + 00:00' >> '2010.1609.0728' – Sietse 2010-09-16 07:25:32