管理月曆日期和時間Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本 ActionScript 3.0 中的月曆日期和時間管理功能都集中在最上層的 Date 類別。Date 類別包含方法和屬性,可讓您以 Coordinated Universal Time (UTC) 或某個時區的本地時間處理日期和時間。UTC 是標準時間定義,基本上與格林威治標準時間 (GMT) 相同。 建立 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; // gets a Date one day after the start date of 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() 建構函式接受多種不同的字串格式 (如需相關資訊,請參閱適用於 Adobe Flash Platform 的 ActionScript 3.0 參考)。下列陳述式會使用字串值初始化新的 Date 物件: var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM"); 如果 Date() 建構函式無法成功剖析字串參數,就不會引發例外。但是,產生的 Date 物件會包含無效的日期值。 取得時間單位值您可以使用 Date 類別的屬性或方法,從 Date 物件擷取各種時間單位的值。下列每個屬性都可以提供 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 天加至某個日期,然後計算出另一個日期: // sets the invoice date to today's date var invoiceDate:Date = new Date(); // adds 30 days to get the due date var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay)); 接著,millisecondsPerDay 會乘以 30 表示 30 天的時間,而且結果會加入至 invoiceDate 值,並且用於設定 dueDate 值。 轉換時區日期與時間計算可以很容易讓您將日期從某個時區轉換為另一個時區。getTimezoneOffset() 方法也很方便,這個方法會傳回 Date 物件的時區與 UTC 相差的分鐘值。傳回分鐘值的原因是,並非所有時區都是以整點方式遞增,部分時區與相鄰時區只相差半小時。 下列範例會使用時區偏移,將日期從本地時間轉換為 UTC。首先會以毫秒算出時區值,然後根據該值調整 Date 值: // creates a Date in local time var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM"); // converts the Date to UTC by adding or subtracting the time zone offset var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000; nextDay.setTime(nextDay.getTime() + offsetMilliseconds); |
|