私はこれを行う方法を探していましたが、複雑なコードの例がたくさん見つかりました。私はこれを使用しています:
var time1 = new Date();
var time1ms= time1.getTime(time1); //i get the time in ms
それから私はコードの他の部分でこれを行います
var time2 = new Date();
var time2ms= time2.getTime(time2);
そして最後に:
var difference= time2ms-time1ms;
var lapse=new Date(difference);
label.text(lapse.getHours()+':'+lapse.getMinutes()+':'+lapse.getSeconds());
これはうまく機能しますが、1つの問題を除いて、与えられた時間は常に+1なので、コードに追加する必要があります(time.getHours()-1)そうでない場合は、さらに1時間かかります。 ...。
他のすべての例よりも簡単な方法だと思います...しかし、正しい失効を得るために「-1」を追加する必要がある理由がまだわかりません。
サンクス!!!
問題はあなたのタイムゾーンです。
new Date(difference)
を実行すると、1970年1月1日から正確にDate
ミリ秒後の瞬間を表すdifference
オブジェクトが作成されます。lapse.getHours()
を実行すると、タイムゾーンが計算に使用されます。 Javascriptを介してタイムゾーンを変更したり、この動作を変更したりすることはできません。いくつかの重い Javascriptのトリックなしではありません。
しかし、あなたのdifference
はnotは日付を表しますが、differenceは日付を表します。扱いはそのようなものであり、次のように時間、分、秒を計算します。
var hours = Math.floor(difference / 36e5),
minutes = Math.floor(difference % 36e5 / 60000),
seconds = Math.floor(difference % 60000 / 1000);
または、lapse
を作成するときにタイムゾーンを考慮に入れることもできます。
var lapse = new Date(difference + new Date().getTimezoneOffset() * 1000);
しかし、私はこれをお勧めしません:Date
オブジェクトはあなたの目的にはやり過ぎです。
getTimezoneOffset()
は分単位で値を返すため、経過を使用する場合は、次のようにタイムゾーンの違いを修正できます。
lapse = new Date(difference);
tz_correction_minutes = new Date().getTimezoneOffset() - lapse.getTimezoneOffset();
lapse.setMinutes(offset_date.getMinutes() + tz_correction_minutes);
今、あなたはできる:
label.text(lapse.getDate()-1+' days and' +lapse.getHours()+':'+lapse.getMinutes()+':'+lapse.getSeconds());
人間が読める形式で時差を印刷する