管理月曆日期和時間

ActionScript 3.0 中的月曆日期和時間管理功能都集中在最上層的 Date 類別。Date 類別包含方法和屬性,可讓您以 Coordinated Universal Time (UTC) 或某個時區的本地時間處理日期和時間。UTC 是標準時間定義,基本上與格林威治標準時間 (GMT) 相同。

副主題

建立 Date 物件
取得時間單位值
執行日期與時間計算
轉換時區

建立 Date 物件

Date 類別可說是所有核心類別當中,用途最廣的建構函式方法之一。您可以用四種不同方式叫用這個類別。

首先,如果不提供參數,Date() 建構函式會傳回 Date 物件,其中包含目前日期和時間,以您的時區的本地時間表示。例如:

var now:Date = new Date();

第二,如果提供一個數字參數,Date() 建構函式會將該數字視為是自 1970 年 1 月 1 日以來的毫秒數,然後傳回相對應的 Date 物件。請注意,您所傳遞的毫秒值會視為是自 1970 年 1 月 1 日 (UTC) 以來的毫秒數。但是,Date 物件會以您的本地時區顯示值,除非您使用 UTC 方法來擷取和顯示值。如果您使用單一毫秒參數來建立新的 Date 物件,請務必將您的本地時間與 UTC 的時差列入計算。下列陳述式會建立 Date 物件,設為 1970 年 1 月 1 日當天午夜 (UTC):

var millisecondsPerDay:int = 1000 * 60 * 60 * 24;
// 取得 1/1/1970 開始日期後一天的日期
var startTime:Date = new Date(millisecondsPerDay);

第三,您可以將多個數字參數傳遞至 Date() 建構函式。建構函式會將這些參數分別視為年、月、日、時、分、秒及毫秒,然後傳回相對應的 Date 物件。這些輸入參數會假設是本地時間而非 UTC。下列陳述式會取得 Date 物件,設為 2000 年 1 月 1 日開始的午夜 (本地時間):

var millenium:Date = new Date(2000, 0, 1, 0, 0, 0, 0);

第四,您可以將單一字串參數傳遞至 Date() 建構函式。建構函式會嘗試將字串剖析為日期或時間組件,然後傳回相對應的 Date 物件。如果您使用這種方法,最好將 Date() 建構函式放在 try..catch 區塊內,以截獲任何剖析錯誤。Date() 建構函式可接受多種不同的字串格式,如 ActionScript 3.0 語言和組件參考所列。下列陳述式會使用字串值初始化新的 Date 物件:

var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");

如果 Date() 建構函式無法成功剖析字串參數,不會引發例外。但是,產生的 Date 物件會包含無效的日期值。

取得時間單位值

您可以使用 Date 類別的屬性或方法,從 Date 物件擷取各種時間單位的值。下列每個屬性都可以提供 Date 物件中的時間單位值:

實際上,Date 類別可提供多種方式來擷取每一個值。例如,您可以用四種不同方式取得 Date 物件的月份值:

這四種方式的效率其實都相同,因此您可以視應用程式所需,使用任一種方式。

上面所列的屬性都是總日期值的組件。例如,milliseconds 屬性不會超過 999,因為一到 1000,seconds 值就會增加 1,而 milliseconds 屬性會重設為 0。

如果您想要以 1970 年 1 月 1 日 (UTC) 以來的毫秒數取得 Date 物件的值,可以使用 getTime() 方法。這個方法的對應方法為 setTime(),可讓您使用 1970 年 1 月 1 日 (UTC) 以來的毫秒數變更現有 Date 物件的值。

執行日期與時間計算

您可以加減 Date 類別的日期與時間。由於日期值在內部是以毫秒計算,因此在從 Date 物件加減值時,必須先將值轉換為毫秒。

如果您的應用程式會執行大量的日期與時間計算,那麼最好能建立常數,以毫秒為單位存放常用的時間單位值,如下所示:

public static const millisecondsPerMinute:int = 1000 * 60;
public static const millisecondsPerHour:int = 1000 * 60 * 60;
public static const millisecondsPerDay:int = 1000 * 60 * 60 * 24;

現在很容易使用標準時間單位來執行日期計算。下列程式碼會使用 getTime()setTime() 方法,將日期值設為目前時間過後一小時:

var oneHourFromNow:Date = new Date();
oneHourFromNow.setTime(oneHourFromNow.getTime() + millisecondsPerHour);

設定日期值的另一個方式是使用單一毫秒參數建立新的 Date 物件。例如,下列程式碼會將 30 天加至某個日期,然後計算出另一個日期:

// 設定發票日期為今天日期
var invoiceDate:Date = new Date();

// 加上 30 天以取得到期日。
var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay));

接下來,millisecondsPerDay 常數就會乘以 30 來代表 30 天的時間,然後結果會加至 invoiceDate 值並用來設定 dueDate 值。

轉換時區

日期與時間計算可以很容易讓您將日期從某個時區轉換為另一個時區。getTimezoneOffset() 方法也很方便,這個方法會傳回 Date 物件的時區與 UTC 相差的分鐘值。傳回分鐘值的原因是,並非所有時區都是以整點方式遞增,部分時區與相鄰時區只相差半小時。

下列範例會使用時區偏移,將日期從本地時間轉換為 UTC。首先會以毫秒算出時區值,然後根據該值調整 Date 值:

// 以本地時間建立 Date
var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");

// 加減時區偏移,將 Date 轉換為 UTC
var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000;
nextDay.setTime(nextDay.getTime() + offsetMilliseconds);

Flash CS3

 

有新的意見加入至這個頁面時,傳送電子郵件給我 | 意見報告

目前頁面: http://livedocs.adobe.com/flash/9.0_tw/main/00000073.html