Actionscript 日付文字列を Date 型にキャストする方法 – クラス Date ホームページ制作 | 墨田区

Actionscript 日付文字列を Date 型にキャストする方法 – クラス Date

LINEで送る
Pocket

日付文字列を、Date 型にキャストしたい・・・実務ではよくある話ですよね。

ここでは、いくつか方法をご紹介します。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・



DateField.stringToDate を利用する

DateField コントロールを利用して、Date 型にキャストします。

Adobe LiveDocs: mx.controls.DateField (Flex 3.2)
日付を含むストリングオブジェクトを解析し、このストリングに対応する Date オブジェクトを返します。inputFormat 引数には、valueString ストリングを書式設定するパターンを含めます。"M"、"D"、"Y"、区切り記号および句読点を含めることができます。 
この関数は、Date オブジェクトの有効性をチェックしません。日、月または年の値が NaN の場合、このメソッドは null を返します。

次に実際の使用例を示します。 

var dob:Date = DateField.stringToDate("06/30/2005", "MM/DD/YYYY");

パラメーター :
 valueString 書式設定する日付値です。
 inputFormat 日付形式を定義するストリングです。
戻り値 :
 Date オブジェクトとして書式設定された日付です。

なるほど、では早速試してみましょう。
以下のテストを実行すると・・・
trace(DateField.stringToDate("2013/05/09", "YYYY/MM/DD"));
trace(DateField.stringToDate("2013/05/39", "YYYY/MM/DD"));
trace(DateField.stringToDate("2013/05/09 10:00:00", "YYYY/MM/DD JJ:NN:SS"));
trace(DateField.stringToDate("2013/05/09 10:00:00", "YYYY/MM/DD"));

結果は以下の通りです。
Thu May 9 00:00:00 GMT+0900 2013
null
null
Thu May 9 00:00:00 GMT+0900 2013

指定できる書式設定パターンは、”Y” ,”M” ,”D” を含む場合のみで、時間を表す書式設定パターンは利用できないようですね。当然、日付として認識できない文字列は null になることがわかりました。

Date.parse を利用する

Date.parse を利用して Date 型にキャストします。

Adobe LiveDocs: Date (Flex 3.2)
日付を表すストリングを、1970 年 1 月 1 日(UTC)から経過したミリ秒数に相当する数値に変換します。 

パラメータ

date:String — Date.toString() () の出力形式に準じた日付のストリング表現です。Date.toString() の出力の日付形式は、次のとおりです。 
     Day Mon DD HH:MM:SS TZD YYYY
次に実際の使用例を示します。 

     Wed Apr 12 15:30:17 GMT-0700 2006
タイムゾーン指定(TZD)は、常に GMT-HHMM または UTC-HHMM の形式になります。これは、グリニッジ標準時(GMT)を基準にした時間と分のオフセットを示します。なお、グリニッジ標準時は現在は世界時(UTC)とも呼ばれています。年、月、曜日は、スラッシュ(/)またはスペースで区切ることができますが、ダッシュ(-)で区切ることはできません。他にも、次のような形式がサポートされます。月、曜日、年だけというように、これらの形式の一部分を含めることもできます。

     MM/DD/YYYY HH:MM:SS TZD
    HH:MM:SS TZD Day Mon/DD/YYYY 
    Mon DD YYYY HH:MM:SS TZD
    Day Mon DD HH:MM:SS TZD YYYY
    Day DD Mon HH:MM:SS TZD YYYY
    Mon/DD/YYYY HH:MM:SS TZD
    YYYY/MM/DD HH:MM:SS TZD
      
戻り値 Number — 1970 年 1 月 1 日(UTC)から経過したミリ秒数を表す数値です。  


次の例では、1974 年 11 月 30 日の日付ストリングを dateParsed に割り当てます。次に、Date.parse() メソッドを呼び出し、この日付を 1970 年 1 月 1 日からのミリ秒数に変換します。 
var dateParsed:String = "Sat Nov 30 1974";
var milliseconds:Number = Date.parse(dateParsed);
trace(milliseconds); // 155030400000

なるほど、parse することで、ミリ秒数が返ってくるんですね。
new Date(ミリ秒数) とすれば、正しい値を取得できますね。

では、早速試してみましょう。

以下のテストを実行すると・・・
trace(Date.parse("2013/05/09"));
trace(Date.parse("2013/05/09 10:00:00"));
trace(Date.parse("2013/05/39"));
trace(new Date(Date.parse("2013/05/09")));
trace(new Date(Date.parse("2013/05/09 10:00:00")));
trace(new Date(Date.parse("2013/05/39")));

結果は以下の通りです。
1368025200000
1368061200000
1370617200000
Thu May 9 00:00:00 GMT+0900 2013
Thu May 9 10:00:00 GMT+0900 2013
Sat Jun 8 00:00:00 GMT+0900 2013

不思議なことに、2013/05/39 という存在しない日付にも関わらず、変換されるんですね。
なぜでしょうか? Adobe LiveDocs には、「1970 年 1 月 1 日からのミリ秒数に変換します。」 とあります。
といことは、“2013/05/39” = “2013/06/08” ということになります。
内部では、2013/05/31 + 8 日 という計算がされているということですね。

試してみましょう。
trace(Date.parse("2013/05/39"));
trace(Date.parse("2013/06/08"));

結果は以下の通りです。

1370617200000
1370617200000

ということで、実務に合わせてどちらを利用するかを判断しましょう。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

コメントを残す

お名前 (必須)
メールアドレス
(アドレスは公開されません)

コメント(必須)

Trackback URL