2つの日付の時差を秒単位で取得します


149

2つの日付の差を秒単位で取得しようとしています。ロジックは次のようになります。

  • 現在の最初の日付を設定します。
  • 最初の日付に将来の秒数を加えた最終日を設定します(たとえば15としましょう)
  • これら2つの違いを取得します(秒数)

私が日付でそれを行う理由は、最終的な日付/時刻が他のいくつかの変数に依存し、同じではないためです(ユーザーが何かを行う速度に依存します)。また、他の事柄の最初の日付も保存します。

私はこのようなものを試してきました:

var _initial = new Date(),
    _initial = _initial.setDate(_initial.getDate()),
    _final = new Date(_initial);
    _final = _final.setDate(_final.getDate() + 15 / 1000 * 60);

var dif = Math.round((_final - _initial) / (1000 * 60));

事は私が正しい違いを決して得ないということです。24 * 60秒で残せる除算を試みましたが、正しくわかりませんでした。では、私のロジックの何が問題になっていますか?それはかなり遅いので、私はいくつかの愚かな間違いをしているかもしれませんが、それを機能させることができないのは私を困らせます:)


2
操作の順序が重要です。
ディランクロス

1
したがって、タイムスタンプを取得し、15秒を追加して、秒単位の違いを確認したいとします。差が出る確率は高いと思います....待ってください.... 15秒?
adeneo

次も参照してください:stackoverflow.com/questions/13893754
Tomasz Nurkiewicz

1
私はあなたが何をしようとしているのか本当に理解しています(私は思う)が、現在Unix時間である新しいDate()を使用する場合、15秒を追加し、すぐに差を確認すると、差は15秒になります(計算にかかったミリ秒は差し引かれます)が、あなたの意図はこれを将来どうにかして比較することだと思います。
adeneo

1
私は本当にそれを理解していません、私のポイントを証明するために、ここにあなたの上記の例のための実用的なフィドルがあります。ユーザーが何かを行うのにかかった時間を把握しようとしている場合、通常、ユーザーが操作を開始したときのタイムスタンプとユーザーが操作を終了したときのタイムスタンプを取得して比較し、それらにかかった時間がわかります。 。15秒間は一体何ですか?
adeneo

回答:


283

コード

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

あるいは(endDate - startDate) / 1000、typescriptを使用していない限り、コメントで指摘されているようにさらに単純です。


説明

オブジェクトのgetTime()メソッドを呼び出してDateから、単純にそれらを減算して1000で除算する必要があります(元はミリ秒単位のため)。追加として、getDate()メソッドを呼び出すと、実際には、getTime()メソッドの呼び出しから取得するエポックタイムとは対照的に、1から31までの整数(ゼロベースではない)として日が取得されます。1970年1月1日00:00からのミリ秒数を表す


暴れる

あなたの日付関連の操作が何であるかに応じて、ライブラリーのような統合に投資する場合がありますdate.jsまたはmoment.js物事を作るそんなに簡単に開発者のために、それは単に個人の好みの問題です。

たとえば、moment.jsでは、どちらを実行するmoment1.diff(moment2, "seconds")かが美しいです。


この回答に役立つドキュメント


14
getTImeは必要ありません。日付は-演算子によって数値に変換されるため、互いに減算できます。
RobG、2015

3
typescriptを使用する場合、getTimeは必要です。これは、any、number、enum以外の要素間の算術演算を許可しません
zaffaste

いずれの場合でもオペレーターが呼び出す.valueOf()ものであるを使用できます-...
Heretic Monkey

1
時間/分の時差も必要な場合はどうですか...?60倍にするか、それとも倍数にするか...?@フアン
gumuruh

個々の質問として、新たな疑問を追加するが、これがおそらく重複として閉じされるので、ここで見てみてくださいstackoverflow.com/questions/1322732/...
フアン・コルテス

5

new Date().getTime()タイムスタンプの取得に使用できます。その後、端部との間の差を計算し、開始し、最終的にあるタイムスタンプ変換することができますmsにしますs

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);

4
<script type="text/javascript">
var _initial = '2015-05-21T10:17:28.593Z';
var fromTime = new Date(_initial);
var toTime = new Date();

var differenceTravel = toTime.getTime() - fromTime.getTime();
var seconds = Math.floor((differenceTravel) / (1000));
document.write('+ seconds +');
</script>

1

以下のコードは、秒単位の時間差を示します。

var date1 = new Date(); // current date
var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second

alert(timeDiffInSecond );

0

高水準プログラミング言語の専用関数を使用してみてください。JavaScriptは.getSeconds();ここに適合します:

var specifiedTime = new Date("November 02, 2017 06:00:00");
var specifiedTimeSeconds = specifiedTime.getSeconds(); 

var currentTime = new Date();
var currentTimeSeconds = currentTime.getSeconds(); 

alert(specifiedTimeSeconds-currentTimeSeconds);

0

momentjsを使用した現在と10分後の時差

let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');

let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
let diff_seconds = diff_milliseconds * 1000;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.