2010-09-15 3 views
8

Tôi có thể xem cái gì đó, nhưng Flash/AS3 có vẻ thiếu chức năng định dạng ngày cơ bản. Làm cách nào để nhận được chuỗi được định dạng từ một số Date? Có một vài tùy chọn như .toLocaleDateString().toUTCString(), nhưng có một chút hạn chế, để nói rằng ít nhất.Làm cách nào để định dạng Ngày trong Flash?

Vì vậy, làm cách nào để định dạng đối tượng Date trong AS3?

+0

Bạn có thể cho ví dụ về cách bạn muốn định dạng ngày không? – JeremyFromEarth

+0

có, mặc dù tôi không thực sự nghĩ rằng nó quan trọng, vì một dateformatter phong nha sẽ có thể xử lý tất cả các loại định dạng tùy chỉnh. Hiện tại tôi muốn có một ngày được định dạng như sau: '2010-09-16T07: 28: 14 + 00: 00' >> ' 2010.1609.0728' – Sietse

Trả lời

27

Flash Player 10.1 đã thêm DateTimeFormatter như một phần của gói flash.globalization. Nó linh hoạt nhưng không được ghi chép đầy đủ.

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

Giúp đỡ rất nhiều! – Narek

+1

bạn cũng có thể chỉ cần ném một hằng số tiện dụng cho arg đầu tiên trên hàm tạo DateTimeFormatter: 'new DateTimeFormatter (LocaleID.DEFAULT);' –

+3

Định dạng 24 giờ: 'dtf.setDateTimePattern (" yyyy-MM-dd 'at 'HH: mm: ss ");' – Bitterblue

2

Dưới đây là một ví dụ đơn giản của một định dạng tùy chỉnh:

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

Tôi đã hy vọng không phải tự tạo ra bánh xe của riêng mình. – Sietse

+0

Có thể nhìn vào lớp util khác nhau có sẵn trong khung/thư viện lớn (as3coreLib, Spring Actionscript1). Tôi không chắc chắn về những gì bạn muốn làm. Bạn chỉ cần định dạng hay máy tính? Một tìm kiếm google đơn giản trả về cho tôi nhiều lớp tiện ích Actionscript 3 để tính toán ngày. Ngoài ra, việc chuyển đổi lớp tiện ích ngày tháng Java thành As3 sẽ là tầm thường. http://github.com/mikechambers/as3corelib/blob/master/src/com/adobe/utils/DateUtil.as –

1

Đáng tiếc là tôi không nghĩ rằng bạn đang nhìn ra bất cứ điều gì về nguồn gốc hỗ trợ. Có this project mà dường như cung cấp một chút linh hoạt hơn, tuy nhiên tôi đã không bao giờ có vòng để làm việc với nó ở độ sâu nào vì vậy tôi không thể xác minh cho nó. Dự án tôi hiện đang làm việc trên có một lớp 500 (và đếm) DateUtil kết quả là ..

1

Có lớp mx.formatters.DateFormatter (xem http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/formatters/DateFormatter.html). Nó có thuộc tính formatString để định dạng tùy chỉnh. Sau đó, bạn có thể gọi format, cung cấp Ngày để nhận chuỗi.

+1

Cần lưu ý rằng DateFormatter là một phần của khung Flex và không có sẵn cho các dự án vani Flash trừ khi bạn bao gồm các thư viện Flex thích hợp. – 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; 
    } 
}