Berapa Banyak Detik Antara Dua Tanggal?

180

Jadi saya punya dua kencan YYYY-MM-DDdanZZZZ-NN-EE

Bagaimana saya bisa mengetahui ada berapa detik di antara mereka?

steven
sumber
173
Saya mencoba untuk meninggalkan setidaknya setengah jam antara kencan untuk menjaga dari tertangkap.
Don Branson
yyyy-MM-ddjelas (tahun, bulan, hari -catat bahwa mereka tidak semuanya ditulis dalam huruf besar), tetapi ZZZZ-NN-EE tidak demikian. Saya menafsirkannya sebagai (zona waktu, ???, hari-dalam-minggu). Apakah ini minggu ke tahun? Jika demikian, itu akan terjadi ww. Tapi tetap saja kita membutuhkan tahun juga untuk menghitung perbedaannya. Bisakah Anda memberikan beberapa nilai sampel yang sebenarnya?
BalusC
7
@ BalusC: Saya percaya dia baru saja pergi ke surat berikutnya untuk menunjukkan kencan kedua (Y -> Z, M -> N, dan D -> E). Menggunakan nama variabel seperti startDate dan endDate mungkin akan lebih baik.
Austin Salonen
Ah, begitu. Ini memang bisa ditanyakan jauh lebih jelas.
BalusC

Jawaban:

242

Saya menggunakan YYYY & ZZZZ untuk berarti nilai integer yang berarti tahun, MM & NN berarti nilai integer yang berarti bulan dalam setahun dan DD & EE sebagai nilai integer yang berarti hari dalam sebulan.

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);

Sumber praktis untuk referensi di masa mendatang adalah situs MDN

Atau, jika tanggal Anda datang dalam format javascript dapat diuraikan

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

dan kemudian Anda dapat menggunakan nilai itu sebagai perbedaan dalam milidetik (berbeda dalam kedua contoh saya memiliki arti yang sama)

Martin
sumber
1
Hanya pola yang digunakan dalam contoh ini yang tidak benar. Tahun 4 digit dicatat dengan huruf kecil yyyy, bulan 2 digit dengan huruf besar MMdan hari 2 digit dengan huruf kecil dd.
BalusC
1
Martin, saya mendapat kesan yang tidak menggunakan pola tanggal di sini. MM DD, YYYY dan NN EE, ZZZZ sebenarnya adalah "nilai contoh" yang diminta Steven. Jadi dengan kata lain, dia tidak melakukan apapun untuk memformat.
Wagner Silveira
Saya telah memperbarui contoh kedua, yang saya kira semua orang bingung. Saya juga menambahkan sedikit klarifikasi tentang bagaimana tepatnya saya menafsirkan nilai-nilai yang diberikan dalam contohnya.
Martin
Variabel kedua Anda perlu dipanggil t2.
Kees C. Bakker
Dalam kebanyakan kasus, Anda mungkin akan melakukan t2 - t1, bukan t1 - t2
UpTheCreek
83

Cukup kurangi:

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");
Seth
sumber
@ user3344977 - maka sesuatu yang lucu sedang terjadi! Periksa nilai adan bdan pastikan bahwa itu adalah Tanggal.
Seth
@Seth Anda benar jadi saya menghapus komentar saya .. salah satu "kencan" saya sebenarnya adalah string. Ini bekerja dengan sempurna.
user3344977
14

Jika salah satu atau kedua kencan Anda di masa depan, maka saya khawatir Anda SOL jika Anda ingin akurasi kedua. Waktu UTC memiliki lompatan detik yang tidak diketahui sampai sekitar 6 bulan sebelum itu terjadi, sehingga tanggal yang lebih jauh dari itu dapat tidak akurat oleh beberapa detik (dan dalam praktiknya, karena orang tidak memperbarui mesin mereka sesering itu, Anda mungkin menemukan bahwa waktu di masa depan mati oleh beberapa detik).

Ini memberikan penjelasan yang bagus tentang teori merancang perpustakaan tanggal / waktu dan mengapa demikian: http://www.boost.org/doc/libs/1_41_0/doc/html/date_time/details.html#date_time.tradeoffs

rmeador
sumber
7
+1 untuk menyebutkan edisi kedua leap! Ini sangat menyebalkan ketika ini salah penanganan, bahkan oleh orang-orang yang seharusnya tahu lebih baik (komite POSIX, saya melihat Anda ...)
Jim Lewis
1
Patut disebutkan bahwa standar ECMA secara eksplisit mengabaikan detik kabisat (yaitu: bahkan melewati detik kabisat): Dalam nilai waktu detik kabisat diabaikan. Diasumsikan ada 86.400.000 milidetik per hari .
Sylvain Leroux
11

Anda dapat melakukannya dengan sederhana.

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

sumber
5

buat dua Dateobjek dan panggil valueOf()keduanya, lalu bandingkan.

Referensi Objek Tanggal JavaScript

Jacob Relkin
sumber
2
getSeconds () -> Mengembalikan detik. (Kisarannya adalah 0-59). Harus berupa valueOf () atau getTime ()
steven
4
var a = new Date("2010 jan 10"),
    b = new Date("2010 jan 9");

alert(
    a + "\n" + 
    b + "\n" +
    "Difference: " + ((+a - +b) / 1000)
);
Justin Johnson
sumber
0

Jalan mudah:

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));
Fernando Pie
sumber
-3

Dalam bash:

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

Itu memang membutuhkan memiliki tanggal bc dan gnu diinstal.

Alex G
sumber
1
Bagaimana ini relevan?
Dropout
-10

.Net menyediakan kelas TimeSpan untuk melakukan perhitungan matematika untuk Anda.

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
Jeff.Crossett
sumber
@ Jeff, Anda mungkin ingin menghapus jawaban ini sehingga Anda tidak kehilangan poin. Mereka meminta kode sumber JavaScript, daripada kode sumber Visual Basic.
MacGyver