質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
NTP

NTP (Network Time Protocol) とは、時計の時刻をネットワーク上のNTPサーバーの持つ正しい時刻に同期するためのプロトコルです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

3回答

7223閲覧

javascriptでの時間取得について

Yousuck

総合スコア349

NTP

NTP (Network Time Protocol) とは、時計の時刻をネットワーク上のNTPサーバーの持つ正しい時刻に同期するためのプロトコルです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2017/01/27 05:09

編集2017/01/27 06:20

お世話になります。
掲題の件、javascriptで正確な時刻を取得する際に
"XMLHttpRequest"でレスポンスヘッダ情報の中の
"Date"オブジェクトを取得し利用していたのですが、
ここで疑問が!
上記方法で時刻を取得した際、サーバ時刻を取得しているとは思いますが、
この場合の「サーバ時刻(疑問1)」は次のどれでしょうか?

1.NTPサーバの?
2.NTPサーバと同期している場合、同期されているWEBサーバ??
3.WEBサーバの、ハードウェアクロックもしくはシステムクロック???
4.上記他

一体どの時刻を取得しているのだろうと思いました。
また、javascriptで正確な時刻を取得する際、
実務で利用する最善の方法(疑問2)は次のどれでしょうか?

1.一般公開されているNTPサーバーへ、JSONP使って取得
2.自前NTPサーバー立てて、JSONP使って取得
3.XMLHttpRequest使って取得する方法で問題ない
4.上記他

お心優しく、懐と知識と股上が深い方がいっらしゃいましたら、
ご教示いただけますと幸いです。
※股上が浅い方でもOKです!
ご回答いただけた方にもれなく、ハートマーク差し上げちゃいます♪

以上、ひらによろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2017/01/27 05:19

その時刻を何に利用するのかもご提示されては?
Yousuck

2017/01/27 06:13

月間10万PVのECサイトの、セール開始時刻でしょうか
guest

回答3

0

ベストアンサー

XMLHttpRequestに格納されているDateは、アクセスしたサーバプロセスが返す値です。サーバプロセスが何の時刻を基準にしているかはプロセスやシステムによりけりなので、結局どのサーバにアクセスしたかによってなにを参照しているかはまちまちです。一般的にはサーバプロセスが動いているマシンの時刻になると思います。サーバも自前で立てているなら、確認してみるとよいでしょう。システム時刻をいじったらこのDateに格納される値も変わってくるはずです。

ミリ秒単位で正確な時刻を求めたところで、通信で取ってくる以上絶対に誤差が出ます。「ユーザが偽装できない」正しい現在時刻がほしいとなると、Javascriptでは無理だと思います。なぜならXMLHttpRequestで返す値なんて改ざんし放題だからです。

それを踏まえた上で、NTPへのアクセスが妥当だと思います。
参考:http://qiita.com/hashrock/items/ce686c5b38d82be16390
ただし、あまり頻繁に時刻を取りに行く必要があるのであれば、この方法はNTPサーバに負荷をかけるためやってはいけません。自作NTPサーバならそれでもよいかもしれません。

投稿2017/01/27 05:36

masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yousuck

2017/01/27 06:43

ご回答ありがとうございました♥ アクセス数が見込めるサイトなどで利用するなら、一般に公開されているNTPにアクセスするのではなく、自前でNTPサーバを立てた方が良いのですね。
Yousuck

2017/01/27 09:56

すみません、少しだけお付き合いいただけましたら幸いです。 XMLHttpRequestの改ざんなのですが、例えばUserAgentを偽装する事は簡単なのは理解できるのですが、 Dateも簡単に偽装できるものなのでしょうか? また、自前のNTPサーバーからjsで時間を取得する方法があればご教示いただけないでしょうか。
masaya_ohashi

2017/01/30 00:22

ローカルプロキシを立てればアプリ側に通知される情報はHTTPSでもないかぎり改ざん可能です。私がデバッグなどに使っていたProxomitronというツールはそういったHTTPレスポンスヘッダ情報とかをいじくることができました。 https://ja.wikipedia.org/wiki/Proxomitron 公式のNTPサーバも自前のNTPサーバも、URLが違うだけで取り方は同じだと思いますよ。
Yousuck

2017/01/30 01:16

おぉ!こんなツールがあったのですね!不勉強でした..ご教示ありがとうございます。しかし、少年ナイフが出て来るとは思わなかった..驚 最初にご教示いただいたURLに、「NICTがJSONサーバを建ててくれている」と記載されていたので、自前の場合はjsonで受け取れるように設定が必要なのかと思ったのですが、いかがでしょうか。
masaya_ohashi

2017/01/30 02:57

あー、すみませんよく調べていませんでした。NTPサーバへのアクセスは通常UDPで行うのでJavascript単体では不可能ですね。自前でサーバを立てるなら、NTPで同期したサーバが、JSONで現在時刻を返すだけのCGIを置いておくだけでほぼ要望の通りの状態になるので、NTPサーバ自体を用意する必要はなさそうですね。
Yousuck

2017/01/30 04:53

なるほど!イメージが掴めました!! 考えていたこととピタリとハマりました! 色々とご回答くださり、ありがとうございました~感謝♪
guest

0

セールの開始時間ということは、世の中の数多くの人が認識している時間である必要があるため、
NPTをベースに参照すべきでしょう。

NPTはサーバの時刻同期をする場合と、クライアント端末の時刻同期をする場合がありますが、
今回の場合、セールの時間はサーバと同じタイミングで開催されるべきで、サーバ側の時刻同期された時間を参照することが望ましいでしょう。

XMLHttpRequestのDateには、そのサーバからの日付が入るので、サーバがNPTサーバで時刻同期されているのであれば、そのままで良いと思います。

ちなみに、日付がクライアントサイドで変更されたとしても、セールの時間が早まったりすることはないので、気にしなくて良いでしょう。

投稿2017/01/27 06:27

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yousuck

2017/01/27 06:49

ご回答ありがとうございました♥ なるほど、同期されているのならXMLHttpRequest使って取得する方法で問題ないのですね! 同期されていない場合はWEBサーバのハードウェアクロックもしくはシステムクロックを取得してくるとの認識で良かったですか?
t_obara

2017/01/27 07:00

サーバのシステムクロックの時間がズレる可能性は十分にあります。 可能であれば、サーバプロセス側でNTPサーバにアクセスした方が望ましいですが、アクセスのたびに NTPサーバにアクセスすることは望ましくないので、別途工夫する必要があるかと思います。
Yousuck

2017/01/27 07:57

最後に1つだけお付き合いいただければ幸いです。 >別途工夫する必要がある この場合、自前の NTPサーバを立て、外部へのNTPアクセスをまとめれば良かったでしょうか。 あくまで1つの方法だとは思うのですが。。
t_obara

2017/01/27 08:17

それも一例だと思います。
Yousuck

2017/01/27 09:26

ありがとうございました。
guest

0

疑問1 :
Webサーバの時間でしょうか

疑問2 :
Webサーバーでしょう、それ以外はめんどくさい

NTPで同期させているなら、NTPからとっても差は誤差範囲でしょう

懐と知識と股上が深い方:
浅いです

以上!

投稿2017/01/27 05:35

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yousuck

2017/01/27 06:41

ご回答ありがとうございました♥ 浅いのは、股上だけですよね?!笑 それはともかく、 WEBサーバの時刻をNTPサーバの時刻と同期させているのなら、XMLHttpRequest使って取得する方法で問題ないとの認識で良いのですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問