2016-08-19 9 views
4

私はサーバーからUTCの日付を戻していますが、「今」とサーバーから返された日付との差を秒単位で調べるにはJSが必要です。サーバにUTCを保存したJSの日付計算ですか?

UTCは、サーバから下って来ると、新しいmoment()を作成していることは、それがローカルになるので、私は現在、

var lastUpdatedDate = moment(utcStringFromServer); 
var currentDate = moment(); 
var diff = currentDate - lastUpdatedDate; 

問題があるようなもので、瞬間をしようとしている、これは、非常に無効な答えを与えます。どのようにして完全なUTCに関する計算を行うことができるので、ローカルのタイミングには無関係ですか?

+1

あなたは['.utc()'](http://momentjs.com/docs/#/manipulating/utc/)を試しましたか? – Jasen

答えて

2

あなたはかなり理解が日付をUTC時間で真夜中からのミリ秒数、1970年1月1日として保存されていることであるではありませんどのような。ブラウザのローカルタイムゾーンで日付/時刻を決定するときは、まず、日付/時刻がUTC時間であるかどうかを調べ、ローカルタイムゾーンオフセットを加算/減算します。

+dateVarまたはdateVar.valueOf()などを使用して日付を数値に戻すと、01/01/1970T00:00:00Zからのミリ秒数に戻ります。

これは、UTC(日付またはISO文字列形式)で日付をシリアル化するときに、自動的にJavascriptのDateオブジェクトによって現地時間に変換されるときは、まったく同じ点になります時間は元の値として、現地時間で表されます。

ローカル日付を数値に変換すると、UTCでミリ秒単位の値を減算することになるミリ秒の値が取得されます。結果は、サーバからの時刻と、new Date()コールが行われた時刻との間に経過したミリ秒数になります。

サーバーからのタイムスタンプを)にするのが難しい場合は、タイムゾーンに関係なく同じ時間と分を表示したいので、ローカル時間に変換する必要があります。しかし、これはあなたがこの場合に必要なものではありません。

+0

あなたは正しい - 私はJSの日付がどのように表現されたかについての基本的な誤解を抱いていた。これは私の問題を解決しました。ありがとう – Abarnett

0

この方法を試してみて、それが役立つことを願って:

var lastUpdatedDate = moment(utcStringFromServer); 
    var date = Date.UTC(); 
    var currentDate = moment(date); 
    var diff = currentDate - lastUpdatedDate; 
+0

あなたが合格しなかった場合、['Date.UTC()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC)は 'NaN'を返しますそれに対する任意のパラメータ。 – AstroCB

+0

yeah @AstroCB私はちょうどチェックした –

0

私はutcStringFromServerは、このようなものであると仮定しています:

Fri, 19 Aug 2016 04:27:27 GMT 

そのような場合、あなたは本当に瞬間を必要としません。まったくjs。その文字列をDate.parse()に渡すと、1970年1月1日以降のミリ秒数が返されます。.toISOString()メソッドを使用すると、今のところ同じ情報が得られます(UTCに変換されます)。 1970年以降はミリ秒単位で取得します。その後、後者から前者を減算し、1000で除算して秒単位に変換します。

すべてのすべてで、それは次のようになります。

var lastUpdatedDate = Date.parse(utcStringFromServer); 
var currentDate = Date.parse((new Date()).toISOString()) 
var diff = (currentDate - lastUpdatedDate)/1000.0; // Convert from milliseconds 
関連する問題