[AS][PHP]GMT(正確にはUTC)タイムを取得する方法
ローカルの時間(PCに設定されてる時計による)ではなく、正確な時間を取得したい場合。
ただFLASH単体では、UTC(GMTみたいなもの)の取得はできないようす。
なのでサーバーサイドのプログラムPHPを使ったら意外と簡単にできました。
↓PHPはこれだけ
<?php //GMTを取得 $time09 = gmdate("D M d Y H:i:s", time()+9*60*60); //ASでは、utc_timeというプロパティで扱える echo "utc_time=".$time09 ?>
FLASH側はこんな感じで、読み込みます。
以下、フレームアクション
//フレームアクション //PHPファイルのURLを定義 var request:URLRequest = new URLRequest ( "get_utc.php" ); //送信方法をPOSTに request.method = URLRequestMethod.POST; //ローダーを作って、PHPを読み込み(実行) var loader:URLLoader = new URLLoader (request); loader.addEventListener(Event.COMPLETE, onComplete); loader.load(request); //PHP読み込み(実行)後の処理 function onComplete(event:Event):void { //↓PHPからの戻り値を変数に格納 var vars:URLVariables = new URLVariables( event.target.data ); //UTCデータを格納するための変数 var utc:String; //データがちゃんとあった場合は、 if (vars.utc_time!= undefined) { //変数に、文字列を渡す utc = vars.utc_time; next(utc); //ムービープレビューのときはローカルタイムを取得 } else { var date:Date = new Date(); utc = date.toString(); next(utc); tf.text = "↓ローカルタイムです"; } } //PHPから読み込んだ文字列を引数にしてDateインスタンスを作成で完了 function next(utc) { var date:Date = new Date(utc); tf2.text = String(date); } //結果表示用のテキストフィールド(2つ用意) var tf:TextField = new TextField(); tf.autoSize ="left"; addChild(tf); var tf2:TextField = new TextField(); tf2.autoSize ="left"; addChild(tf2); tf2.y = 30;
ポイントはPHPから取得した文字列をそのままDateクラスのコンストラクタの引数に突っ込めば、その情報を持ったDateインスタンスが作れるところですかね。
(逆に言うと、PHPで取得する文字列は、Dateクラスで認識できる形にしてあげる必要があるってことかね)
ただこの場合の「UTCタイム」はサーバーの時計ってことになるのかな?
ってことは、サーバーの時計が狂ったらアウトってことなんだろうね。
Tweet