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

Actionscriptで日付文字列を Date 型にキャストする方法です。

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

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


DateField.stringToDate を利用する

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

Adobe LiveDocsにはこうあります。

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

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

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

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

DateField - Adobe ActionScript® 3(AS3 Flex)API リファレンス

なるほど、では早速試してみましょう。

以下のテストを実行すると・・・

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にはこうあります。

日付を表すストリングを、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

Date - Adobe ActionScript® 3(AS3 )API リファレンス

なるほど、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

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

おつかれさまでした。

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