jQuery
エポック(1970年1月1日)からのミリ秒数として現在の時刻を返すこの関数があります。
time = new Date().getTime();
Rubyで同じことをする方法はありますか?
現在、私はRubyを使用してTime.now.to_i
います。これはうまく機能しますが、10桁の整数(秒数)を返します。
のように、ミリ秒数を表示するにはどうすればよいjQuery
ですか?
jQuery
エポック(1970年1月1日)からのミリ秒数として現在の時刻を返すこの関数があります。
time = new Date().getTime();
Rubyで同じことをする方法はありますか?
現在、私はRubyを使用してTime.now.to_i
います。これはうまく機能しますが、10桁の整数(秒数)を返します。
のように、ミリ秒数を表示するにはどうすればよいjQuery
ですか?
回答:
require 'date'
p DateTime.now.strftime('%s') # "1384526946" (seconds)
p DateTime.now.strftime('%Q') # "1384526946523" (milliseconds)
strftime
によって提供されるメソッドにActiveSupport::TimeWithZone
は、%s
および%Q
指定子は含まれていません。このメソッドDateTime
を使用して、最初にプレーンなRubyに変換する必要がありますto_datetime
。
Javascriptgettime()
は、エポックからのミリ秒数を返します。
RubyTime.now.to_i
は、エポックからの秒数を示します。これをに変更するとTime.now.to_f
、秒が表示されますが、小数部分が含まれます。これに1,000を掛けるだけで、ミリ秒になります。次に、を使用#to_i
して整数に変換します。そして、あなたは最終的に:
(Time.now.to_f * 1000).to_i
Time.now
からTime.current
来ているのでRubyから来ています。したがってTime.current
、Railsアプリケーションのタイムゾーンによって確認され、Time.now
サーバーのタイムゾーンを使用しています。私の経験では、Time.current
タイムゾーンの一貫性のためにRailsアプリケーションで常に使用してください
Time.current
ここではまったく使用しないでください。構築に時間がかかります。また、すぐにUNIXタイムスタンプに変換するため、タイムゾーンの一貫性についてはまったく気にしません。(Unixタイムスタンプは常にUTCに関連しています)。つまり、99%のケースであなたの言っていることが真実ですが、これはパフォーマンス面では最後の1%に該当します。
:epoch
メソッドを追加することです。classTimedef epoch(self.to_f * 1000).to_i end end
(Time.now.to_f * 1000).to_i
同じことをする必要があります。
to_f
ミリ秒を小数として含むため、含まれません。
を使用してstrftime
、秒数を取得し、ミリ秒の小数部(または必要に応じてより小さな単位)を追加できます。
2.2.2 :001 > t = Time.new
=> 2015-06-02 12:16:56 -0700
2.2.2 :002 > t.strftime('%s%3N')
=> "1433272616888"
これは丸められないことに注意してください。to_f
マイクロ秒で、またはマイクロ秒に達するとわかるように、切り捨てられます。
2.2.2 :003 > t.to_f
=> 1433272616.888615
2.2.2 :004 > t.usec
=> 888615
およびto_f
/to_i
ソリューションは、同じ問題があります。
2.2.2 :009 > (t.to_f * 1000).to_i
=> 1433272616888
あなたが本当にミリ秒精度を気にしそうだとすれば、より良い賭けであってもよいto_f
とround
:
2.2.2 :010 > (t.to_f * 1000).round
=> 1433272616889
とはいえ、ドキュメントに記載されているように、「IEEE 754 doubleは、エポック以降のナノ秒数を表すのに十分な精度ではありません」。したがって、本当に気にする場合to_r
は、to_f
-の代わりに検討してください。
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
-ただし、ミリ秒に丸めるだけであれば、おそらく問題ありません。
注意してください、混乱しないでください。Rubyが分数秒の概念を浮動小数点としてサポートしているという事実は、実際には浮動小数点数にはなりません。PythonでWiresharkのタイムスタンプの時間比較を行っていたときにこれに問題が発生しました... pcap-ngの時間計算が機能していませんでした。両方の整数が適切な数値を取得できたので、2つの部分(整数秒と整数ナノ秒)を処理したときだけでした。
これは、浮動小数点数に精度の問題があるためです。実際、Rubyを少し紹介すると、to_fがnsecと等しくないことがわかります。
irb(main):019:0> t=Time.now
=> 2015-04-10 16:41:35 -0500
irb(main):020:0> puts "#{t.to_f}; #{t.nsec}"
1428702095.1435847; 143584844
警告プログラマー。有効数字3桁まで安全かもしれませんが、事実は変わりません。コンピューターの浮動小数点数は概算です。最新のコンピューターのナノ秒カウンターは整数です。
.strftime("%9N")
も使用できます。 ruby-doc.org/core-2.3.1/Time.html#method-i-strftime
でTimeオブジェクトを取得しTime.now
、呼び出すと#to_i
Unixタイムスタンプ(エポックからの秒数)が返されます。 #to_f
エポックからミリ秒を取得するために使用できる秒の小数部を示します。
Time.now.to_f * 1000