Actionscript 日付文字列を Date 型にキャストする方法 – クラス Date
Actionscriptで日付文字列を Date 型にキャストする方法です。
日付文字列を、Date 型にキャストしたい・・・実務ではよくある話ですよね。
ここでは、いくつか方法を紹介します。
DateField.stringToDate を利用する
DateField コントロールを利用して、Date 型にキャストします。
Adobe LiveDocsにはこうあります。
日付を含むストリングオブジェクトを解析し、このストリングに対応する Date オブジェクトを返します。inputFormat 引数には、valueString ストリングを書式設定するパターンを含めます。"M"、"D"、"Y"、区切り記号および句読点を含めることができます。
DateField - Adobe ActionScript® 3(AS3 Flex)API リファレンス
この関数は、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にはこうあります。
日付を表すストリングを、1970 年 1 月 1 日(UTC)から経過したミリ秒数に相当する数値に変換します。
Date - Adobe ActionScript® 3(AS3 )API リファレンス
パラメータ
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
ということで、実務に合わせてどちらを利用するかを判断しましょう。
おつかれさまでした。