2つの日付の間に何秒ありますか?


180

だから私は2つの日付YYYY-MM-DDZZZZ-NN-EE

それらの間の秒数を知るにはどうすればよいですか?


173
捕まるのを防ぐために、私は日付の間に少なくとも30分を残そうとします。
Don Branson

yyyy-MM-dd明確(年、月、日-すべて大文字ではないことに注意)ですが、ZZZZ-NN-EEはそうではありません。(タイムゾーン、???、曜日)として解釈します。それは年ごとですか?もしそうなら、それはだったでしょうww。しかし、それでも差を計算するには年も必要です。実際のサンプル値をいくつか教えていただけますか?
BalusC 2010年

7
@BalusC:彼は2番目の日付(Y-> Z、M-> N、D-> E)を示すために次の文字に行ったと思います。startDateやendDateなどの変数名を使用した方が良いでしょう。
オースティンサローネン2010年

ああ、なるほど。これは確かにはるかに明確に尋ねられた可能性があります。
BalusC、2010年

回答:


242

YYYY&ZZZZは年を意味する整数値を意味し、MM&NNは年の月を意味する整数値を意味し、DD&EEは月の日を意味する整数値を意味します。

var t1 = new Date(YYYY, MM, DD, 0, 0, 0, 0);
var t2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0);
var dif = t1.getTime() - t2.getTime();

var Seconds_from_T1_to_T2 = dif / 1000;
var Seconds_Between_Dates = Math.abs(Seconds_from_T1_to_T2);

将来の参照に役立つソースはMDNサイトです

または、日付がjavascriptが解析できる形式の場合

var dif = Date.parse(MM + " " + DD + ", " + YYYY) - Date.parse(NN + " " + EE + ", " + ZZZZ);

そして、その値をミリ秒単位の差として使用できます(私の両方の例でdifは同じ意味です)


1
例で使用されているパターンのみが正しくありません。4桁の年は小文字で表記されyyyy、2桁の月は大文字で表記され、2 MM桁の日は小文字で表記されddます。
BalusC、2010年

1
マーティン、ここでは日付パターンを使用していない印象があります。MM DD、YYYYおよびNN EE、ZZZZは、実際にはStevenが尋ねた「値の例」です。つまり、言い換えれば、彼はフォーマットのために何もしていません。
Wagner Silveira、2010年

私は2番目の例を更新しました。これは、誰もが混乱していると思います。また、彼の例で与えられた値をどのように解釈するのかについての明確化も少し追加しました。
マーティン

2番目の変数を呼び出す必要がありますt2
キースC.バッカー

ほとんどの場合、おそらくt1-t2ではなくt2-t1を実行します
UpTheCreek

83

差し引くだけです:

var a = new Date();
alert("Wait a few seconds, then click OK");

var b = new Date();
var difference = (b - a) / 1000;

alert("You waited: " + difference + " seconds");

@ user3344977-その後、何か面白いことが起こっています!aおよびの値をb確認し、それらが日付であることを確認してください。
Seth

@あなたが正しいので、コメントを削除しました。私の「日付」の1つは、実際には文字列でした。これは完全に機能します。
user3344977

14

1つまたは両方の日付が将来の日付である場合、秒単位の精度が必要なのはSOLです。UTC時間にはうるう秒があり、それが発生するまでに約6か月かかるため、それよりも前の日付は、秒単位で不正確になる可能性があります(実際には、人々は頻繁にマシンを更新しないため、将来の任意の時間が数秒ずれる場合があります)。

これは、日付/時刻ライブラリの設計理論とその理由をよく説明しています。http//www.boost.org/doc/libs/1_41_0/doc/html/date_time/details.html#date_time.tradeoffs


7
うるう秒問題に言及するための+1!これをもっとよく知っているはずの人々によってさえ、これが誤って処理されるととてもイライラします(POSIX委員会、私はあなたを見ている...)
Jim Lewis

1
ECMA標準がうるう秒を明示的に無視する(つまり、過去のうるう秒であっても)ことを言及する価値がある時間の値では、うるう秒は無視されます。1日あたり正確に86,400,000ミリ秒であると想定されています
Sylvain Leroux、

11

簡単にできます。

var secondBetweenTwoDate = Math.abs((new Date().getTime() - oldDate.getTime()) / 1000);



0

簡単な方法:

function diff_hours(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60 * 60);
  return Math.abs(Math.round(diff));

 }


function diff_minutes(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60);
  return Math.abs(Math.round(diff));

 }

function diff_seconds(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  return Math.abs(Math.round(diff));

 }

function diff_miliseconds(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime());
  return Math.abs(Math.round(diff));

 }


dt1 = new Date(2014,10,2);
dt2 = new Date(2014,10,3);
console.log(diff_hours(dt1, dt2));


dt1 = new Date("October 13, 2014 08:11:00");
dt2 = new Date("October 14, 2014 11:13:00");
console.log(diff_hours(dt1, dt2));

console.log(diff_minutes(dt1, dt2));

console.log(diff_seconds(dt1, dt2));

console.log(diff_miliseconds(dt1, dt2));

-3

bashでは:

bc <<< "$(date --date='1 week ago' +%s) - \
    $(date --date='Sun,  29 Feb 2004 16:21:42 -0800' +%s)"

bcとgnuの日付をインストールする必要があります。


1
これはどのように関連していますか?
ドロップアウト2014年

-10

.Netは、計算を行うTimeSpanクラスを提供します。

var time1 = new Date(YYYY, MM, DD, 0, 0, 0, 0)
var time2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0)

Dim ts As TimeSpan = time2.Subtract(time1)

ts.TotalSeconds

@ジェフ、あなたはこの答えを削除して、ポイントを失わないようにしたいかもしれません。彼らは、Visual Basicのソースコードではなく、JavaScriptのソースコードを求めました。
MacGyver 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.