サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

Date.getTime()メソッドが小数値を返す

ID: FN0404001 Product: Flash

Platform: All
Version: MX & MX 2004

1. 現象
Macintosh版のFlash MXおよびMX 2004でDate.getTime()メソッドを使うと、ミリ秒を小数値で返すことがあります。

2. 原因
Macintosh版Flash MXおよびMX 2004で報告された問題です。Dateクラスのコンストラクタに引数なしでインスタンスを作成した場合、Date.getTime()メソッドで取得したミリ秒が少数値になります。

// フレームアクション
my_date = new Date();
trace(my_date.getTime());  // 少数第2位までの数値を返します

コンストラクタに引数を渡してインスタンスを生成したり、Date.setFullYear()メソッドで日付を設定し直すと、Date.getTime()メソッドの戻り値は整数になります。

// フレームアクション
my_date = new Date();
nNow = my_date.getTime();
// 翌日つまり24時間後の日付に値を変更
my_date.setFullYear(my_date.getFullYear(), my_date.getMonth(), my_date.getDate()+1);
nTomorrow = my_date.getTime();
// 少数値の誤差により差が24時間に未満に
trace(Math.floor((nTomorrow-nNow)/1000/60/60));  // 出力: 23

3. 対処法
少数値の誤差が問題になる処理では、引数なしのコンストラクタで作成したインスタンスをそのまま使わず、Date.setFullYear()メソッドで日付を設定し直します。

// フレームアクション
my_date = new Date();
// Date.setFullYear()メソッドで日付を再設定
my_date.setFullYear(my_date.getFullYear());
nNow = my_date.getTime();
my_date.setFullYear(my_date.getFullYear(), my_date.getMonth(), my_date.getDate()+1);
nTomorrow = my_date.getTime();
trace(Math.floor((nTomorrow-nNow)/1000/60/60));  // 出力: 24

_____

作成者: 野中文雄
作成日: 2004年4月12日


Copyright © 2001-2004 Fumio Nonaka.  All rights reserved.