2011-12-18 4 views
1

私は使用できるjavascriptにいくつかのウィンドウ変数がありますか、または日付オブジェクトを使用せずに経過時間を追跡するタイマーを使用する方法はありますか? flash.utils.getTimerはこのアプリケーションのFlashバージョンで素晴らしい動作し、私はjavascriptに移植しようとしています。セキュリティ上の問題を引き起こすシステムクロックの変更を危険にさらすことはできないため、Dateオブジェクトを使用したくありません。Javascript equiv to flash.utils.getTimer?

私はservertimestampを持っています。私は現在のサーバー時間を計算するためにオペレーティングシステムの時間に依存しないタイマーを作成したいと思います。この計算された値を使用して、サーバー時のウィンドウ中のさまざまな操作を許可します。私はそこにセキュリティがないことを知っているので、私はJavaScriptのハッキングに心配していないが、私はカジュアルなユーザーが特定の機能の可用性を乱用するのを防ぐためにしたいと思います。明確化のため

おかげ

を追加しました:

このプロジェクトは、ビデオイベントを生きることに関するものです。ライブビデオにはサーバーとの相対的な開始時刻があり、別のWebサービスを介してサーバー時刻を取得できます。私がする必要があるのは、クライアントマシン上でこのサーバー時間を維持して、ライブストリームをいつクライアントで開始および停止するかを決定するためのユーザーの現地時間から独立させることです。だから問題は実際にサーバーの時刻を格納する形式ではなく、日付オブジェクトを使わずにサーバーの時刻を取得してから経過時間を取得する方法です。

+0

「日付オブジェクトを使用しない」というのは、意味が分かりませんが、FWIWでは、私のソリューションは実際に日付オブジェクトを使用しません。単に初期化用のものを作成するだけです。すぐにミリ秒値に変換され、使用されます。必要な場合は、最初からミリ秒の値を使用できます。 – Tomalak

+0

それは私の部分で間違って言われました。私が言いたいことは、オフセットを計算するのに現在の時間を使わないようにしたかったということでした。 (例えば、新しいDate()) – Shane

答えて

5

独自のタイマーオブジェクトを作成できます。

function Timer(init, precision) { 
    var start = time = new Date(init || null).valueOf(), 
     precision = precision || 100; 

    setInterval(function() { time += precision; }, precision); 

    this.elapsed = function() { return time - start; }; 
    this.getDate = function() { return new Date(time); }; 
} 

をし、それを使用します。

var t = new Timer(); // default timer 
/* ... do things ... */ 
alert(t.elapsed()); // a millisecond value 
alert(t.getDate()); // a Date object 

はあなたが好む任意の日付の値でタイマーを開始するinitパラメータを使用します。

+0

ああ!ありがとう。自分のTimerオブジェクトを作成することについて考えなかった。 私はそれが私が必要なもののために働くと思う、ありがとう! – Shane

1

サーバーにサーバーの時刻を送信して、それをjavascriptのDate変数に格納させることができます。次に、この変数に基づいて計算を行うことができます。この変数は、サーバー時間であり、クライアント・システムのクロックに依存しないことがわかっています。限り、一定の間隔でいくつかのjavascriptメソッドを実行する限り、setTimeoutsetIntervalメソッドを使用することができます懸念されています。

+0

経過時間を計算するために問題が(私が誤解しない限り)、私はまだ経過時間を取得するために日付オブジェクトから派生した現在の時間から引き算する必要があります。私はそれを正しく持っているのですか、何かが欠けていますか? – Shane

+1

@Shane、[日](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date)オブジェクトを使用して、特定の値に初期化する代わりに、現在のシステム時間を使用することを可能にするコンストラクタを有していますクライアント上でたとえば、サーバーから1970年1月1日00:00:00 UTC(Unix Epoch)以降のミリ秒数を渡すことができます。このようにして、クライアント時間ではなくサーバー時間を取得します。 –

+0

わかりました、私は元の投稿で少し詳しく説明します。 – Shane

関連する問題