2016-10-17 13 views
1

ミリ秒を読み取り可能な時刻形式:00:00:00(hh/mm/ss)に変換するこの関数をAS3で作成しました。条件付きでフラッシュ/ AS3重複警告が発生する

function convertTime(millis:Number):String { 

    var Seconds = ((millis/1000) % 60); 
    var Minutes = (((millis/1000)/60) % 60); 
    var Hours = ((((millis/1000)/60)/60) % 24); 

     if (Math.floor(Seconds) < 10) { 
      var newSeconds = "0" + Math.floor(Seconds); 
     } else { 
      var newSeconds = Math.floor(Seconds); 
     } 

     if (Math.floor(Minutes) < 10) { 
      var newMinutes = "0" + Math.floor(Minutes); 
     } else { 
      var newMinutes = Math.floor(Minutes); 
     } 

     if (Math.floor(Hours) < 10) { 
      var newHours = "0" + Math.floor(Hours); 
     } else { 
      var newHours = Math.floor(Hours); 
     } 

    return (newHours + ":" + newMinutes + ":" + newSeconds); 
} 

すべては今まで、私は次のように関連していると確信している単一の数字を返す秒を除いて動作するようです:

フラッシュコンパイラは「警告3596まで投げている:重複変数定義を"else文で設定された変数のインスタンスごとに?

これは間違っていますか?

これらが条件文に含まれているということは、各変数が一度正しく設定されていることを意味するはずです。

または、AS3でelseを削除する際に、実際に明示的に指定する必要がありますか?例:

if (Math.floor(Hours) < 10) { 
      var newHours = "0" + Math.floor(Hours); 
     } 

if (Math.floor(Hours) >= 10) { 
      var newHours = Math.floor(Hours); 
     } 

答えて

4

Ahh私はそれを見つけました。 AS3はvar宣言には本当に厳格です。

VARは、すでに他でそれを再宣言する場合はその必要はありませんに設定されている

if (Math.floor(Hours) < 10) { 
      var newHours = "0" + Math.floor(Hours); 
     } else { 
      newHours = Math.floor(Hours); 
     } 
+0

var newHours: "0"を追加すると、if/elseブロックの前に文字列を指定し、文字列として入力する必要があります。 例:newHours = "0" + Math.floor(Hours).toString(); – tatactic

+0

この問題を解決済みとマークできますか? 毎回この問題をチェックするのは面倒です。 問題が解決済みとマークされているので、私はこれを何度も読む必要はないことを知っています。 あなた自身の回答も確実に受け入れることができます。 しかし、してください、このトピックを失う! よろしくお願いいたします。 – tatactic

1

[EDIT]

を回避するためであれば、他(使用して、すべてのものを取得タイマーあなたは代わりにDateクラスを使用し、flash.globalization.DateTimeFormatterクラスを使用することができます。

出力をフォーマットするには、単にsetDateTimePattern()メソッドを使用します。 あなたの場合は、setDateTimePattern( "hh:mm:ss");を使用します。ミリ秒を取得したい場合を除いて...

DateTimeFormatterクラスは本当に便利ですが、Millisecons(「hh:mm:ss:SSS」)を取得しようとすると問題が発生する可能性があるため、必要な場合はミリ秒単位で取得するコード。

[EDIT 2]

import flash.utils.getTimer; 
import flash.globalization.DateTimeFormatter; 
import flash.globalization.DateTimeStyle; 

var currentTime = new Date(); 
function getMS():String{ 
    var ms = currentTime.milliseconds; 
    if (ms<10) 
    { 
     ms = "000" + ms; 
    } 
    if (ms<100) 
    { 
     ms = "00" + ms; 
    } 
    return ms.toString(); 
} 

function formatDate(date:Date) { 
    var dtf:DateTimeFormatter = new DateTimeFormatter("en,EN"); 
    dtf.setDateTimePattern("yyyy-MM-dd HH:mm:ss:"); 
    var longDate:String = dtf.format(date); 
    trace(longDate.toString() + getMS()); 
    //trace("***LocaleID requested=" + dtf.requestedLocaleIDName); 
    //trace("***Format requested (" + dtf.getDateTimePattern() + ")"); 
} 
trace("setDateTimePattern example"); 
formatDate(currentTime); 
// output the current time formated as "hh:mm:ss:SSS" 

はしたがって、この場合に出力される。

setDateTimePattern example 
2016-10-23 11:53:32:979 

[/ EDIT 2]

[/ EDIT]

よろしく。 Nicolas。

+0

ラントの場合:-1。彼らは雑音を除いて答えに何も加えない。それらがなければ、これは良い答えかもしれません。 – null

+0

@null私は答えを改善しようとしており、ノイズが少ないと思っています。 申し訳ありませんが、私の間違い! 私は英語が母国語ではなく、早く行きたいと思っていました... – tatactic

+1

@Grantあなたは私の答えを見ましたか? これにより、多くのループを回避し、このメソッドを使用して日付オブジェクトを必要に応じて書式設定することができます。問題は、ミリ秒を表示する場合に問題が発生する可能性があることです。 "MMMM"が、それを修正するための回避策があります。 私はこれが役立つことを願っています。 – tatactic

0

これは、AS3が変数の宣言を処理する方法によるものです。これは、機能レベルのスコープを使用し、ブロックレベルのスコープを使用しないAS3スコープ・モデルに由来します。だから、もちろん、あなたがそれらのために3596警告を参照してください

function convertTime(millis:Number):String { 
    var Seconds = ((millis/1000) % 60); 
    var Minutes = (((millis/1000)/60) % 60); 
    var Hours = ((((millis/1000)/60)/60) % 24); 
    var newSeconds; //Seconds 'if' case 
    var newSeconds; //Seconds 'else' case 
    var newMinutes; //Minutes 'if' case 
    var newMinutes; //Minutes 'else' case 
    var newHours; //Hours 'if' case 
    var newHours; //Hours 'else' case 

    if (Math.floor(Seconds) < 10) { 
     newSeconds = "0" + Math.floor(Seconds); 
    } else { 
     newSeconds = Math.floor(Seconds); 
    } 

    if (Math.floor(Minutes) < 10) { 
     newMinutes = "0" + Math.floor(Minutes); 
    } else { 
     newMinutes = Math.floor(Minutes); 
    } 

    if (Math.floor(Hours) < 10) { 
     newHours = "0" + Math.floor(Hours); 
    } else { 
     newHours = Math.floor(Hours); 
    } 

    return (newHours + ":" + newMinutes + ":" + newSeconds); 
} 

:あなたのコード内の変数宣言はと同等の、は、関数の先頭にを掲揚得ます。

さらに詳しくはhttp://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9d.htmlも参照してください。

関連する問題