C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: JSでの時間取得について


(過去ログ 127 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■75435 / inTopicNo.1)  JSでの時間取得について
  
□投稿者/ くま (12回)-(2015/03/25(Wed) 09:36:11)

分類:[JavaScript] 

2015/03/25(Wed) 09:59:58 編集(投稿者)

お世話になります。
JavaScriptで不明な箇所があるので教えてください。

val1で時間を取得します。
その後、1秒後に再度時間を取得します。

そして、時間の差をアラート表示しています。

下記の方法で行うと、なぜか
val2 - val1の値が「1001」「1002」などの値になってしまい
時間をうまく取得できません。

原因は何でしょうか。
よろしくお願いいたします。


<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>test</title>


<script type="text/javascript">

function test(){

var val1 = Date.now();

setTimeout(function(){

var val2 = Date.now();
alert(val2 - val1);

}, 1000);

}
</script>

</head>
<body>
<input type="button" value="click" onClick="test()">

</body>
</html>
引用返信 編集キー/
■75437 / inTopicNo.2)  Re[1]: JSでの時間取得について
□投稿者/ 魔界の仮面弁士 (259回)-(2015/03/25(Wed) 10:08:46)
No75435 (くま さん) に返信
> val2 - val1の値が「1001」「1002」などの値になってしまい
> 時間をうまく取得できません。

setInterval も試してみましたが、運良く 1000 ジャストで呼ばれる事もありましたが、
1001 や 1002 になることが多く、それどころか、スクロールしたり無関係な箇所を
クリックするなどの「余計な処理」を行っていた場合は、3000を超える値に
なることもありました。


すなわち、1000 ミリ秒ジャスト後に呼ばれる事が保証されているのではなく、
処理待ちのイベントキューに蓄えて処理する形を取っている、ということでしょう。

関連情報:
http://d.hatena.ne.jp/sandai/20100513/p1
引用返信 編集キー/
■75438 / inTopicNo.3)  Re[2]: JSでの時間取得について
□投稿者/ くま (13回)-(2015/03/25(Wed) 10:15:15)
2015/03/25(Wed) 10:21:51 編集(投稿者)

No75437 (魔界の仮面弁士 さん) に返信
さっそくの回答ありがとうございます。

var val2 = Date.now();

の処理の値がうまく取得できない原因は何なのでしょうか。


Date.now()は、UTC(協定世界時)での 1970 年 1 月 1 日 00 時 00 分 00 秒 から現在までの経過ミリ秒を数値で返すみたいですが、取得に失敗してるという事でしょうか。

自分でも少し混乱しているので、変なこと聞いていたらすみません。
引用返信 編集キー/
■75439 / inTopicNo.4)  Re[3]: JSでの時間取得について
□投稿者/ Hongliang (299回)-(2015/03/25(Wed) 10:24:38)
Date.now()に問題があるのではないです。
単に、setTimeoutなりで呼び出されるのが、指定時間ちょうどであるとは保証されないと言うだけの話です。
引用返信 編集キー/
■75440 / inTopicNo.5)  Re[3]: JSでの時間取得について
□投稿者/ 魔界の仮面弁士 (260回)-(2015/03/25(Wed) 10:45:29)
No75438 (くま さん) に返信
> の処理の値がうまく取得できない原因は何なのでしょうか。

なにをもってして「うまく取得できない」と判断されたのかが分かりませんが、
それは、now メソッドの返却値が、実際の時間とズレがあるということでしょうか。

だとしたら、それはどの程度のズレでしょうか?


先の確認方法だとしたら、setTimeout や setInterval の精度は、
そもそも 1ms よりは粗いので、測定方法に問題があります。

9時間(32,400,000ミリ秒)前後の差だとすれば、
それは JST と UTC の時差を意味しているので、
Date.now() ではなく、new Date() で確認した方が
分かりやすいかと思います。
引用返信 編集キー/
■75442 / inTopicNo.6)  Re[4]: JSでの時間取得について
□投稿者/ くま (14回)-(2015/03/25(Wed) 11:19:32)
2015/03/25(Wed) 14:05:19 編集(投稿者)

No75440 (魔界の仮面弁士 さん) に返信

ありがとうございます。魔界さんが書かれて内容で理解できました。
混乱していて、変な質問していました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -