Dapatkan perbedaan waktu antara dua tanggal dalam detik

149

Saya mencoba untuk mendapatkan perbedaan antara dua tanggal dalam hitungan detik. Logikanya akan seperti ini:

  • tetapkan tanggal awal yang sekarang;
  • tetapkan tanggal akhir yang akan menjadi tanggal awal ditambah sejumlah detik di masa mendatang (misalkan 15 misalnya)
  • dapatkan perbedaan di antara keduanya (jumlah detik)

Alasan mengapa saya melakukannya dengan tanggal adalah karena tanggal / waktu akhir tergantung pada beberapa variabel lain dan tidak pernah sama (tergantung pada seberapa cepat pengguna melakukan sesuatu) dan saya juga menyimpan tanggal awal untuk hal-hal lain.

Saya sudah mencoba sesuatu seperti ini:

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

Masalahnya adalah saya tidak pernah mendapatkan perbedaan yang tepat. Saya mencoba membagi dengan 24 * 60yang akan meninggalkan saya dengan detik, tetapi saya tidak pernah melakukannya dengan benar. Jadi apa yang salah dengan logika saya? Saya mungkin membuat beberapa kesalahan bodoh karena sudah agak terlambat, tapi itu mengganggu saya bahwa saya tidak bisa membuatnya bekerja :)

Roland
sumber
2
Urutan operasi adalah kuncinya.
Dylan Cross
1
Jadi, Anda ingin memiliki cap waktu, tambahkan 15 detik, dan kemudian lihat perbedaannya dalam hitungan detik. Saya akan mengatakan kemungkinannya besar bahwa perbedaannya akan .... tunggu, 15 detik?
adeneo
Lihat juga: stackoverflow.com/questions/13893754
Tomasz Nurkiewicz
1
Saya benar-benar mengerti apa yang Anda coba lakukan (saya pikir), tetapi Jika Anda mengambil Date baru (), yang merupakan waktu unix sekarang, tambahkan 15 detik, dan segera periksa perbedaannya, perbedaannya adalah 15 detik (minus milidetik yang diperlukan untuk menghitung), tapi saya kira niat Anda adalah untuk membandingkan ini di masa depan.
adeneo
1
Saya tidak benar-benar mengerti, untuk membuktikan pendapat saya, inilah FIDDLE yang berfungsi untuk contoh Anda di atas. Jika Anda mencoba mencari tahu berapa lama pengguna melakukan sesuatu, Anda biasanya mendapatkan cap waktu ketika pengguna memulai operasi, dan cap waktu ketika pengguna menyelesaikan operasi, dan membandingkannya, dan Anda tahu berapa lama . Untuk apa 15 detik?
adeneo

Jawaban:

283

Kode

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

Atau bahkan lebih sederhana (endDate - startDate) / 1000seperti yang ditunjukkan dalam komentar kecuali Anda menggunakan naskah.


Penjelasan

Anda perlu memanggil getTime()metode untuk Dateobjek, dan kemudian cukup kurangi dan bagi dengan 1000 (karena itu awalnya dalam milidetik). Sebagai tambahan, ketika Anda memanggil getDate()metode, Anda sebenarnya mendapatkan hari bulan sebagai bilangan bulat antara 1 dan 31 (bukan berbasis nol) sebagai lawan dari waktu yang Anda dapatkan dari memanggil getTime()metode, mewakili jumlah milidetik sejak 1 Januari 1970, 00:00


Kata-kata kasar

Bergantung pada operasi tanggal terkait Anda, Anda mungkin ingin berinvestasi dalam mengintegrasikan perpustakaan seperti date.js atau moment.js yang membuat segalanya jauh lebih mudah bagi pengembang, tetapi itu hanya masalah preferensi pribadi.

Misalnya dalam moment.js kita akan melakukan moment1.diff(moment2, "seconds")yang indah.


Dokumen yang berguna untuk jawaban ini

Juan Cortés
sumber
15
Tidak perlu getTIme , Tanggal dapat dikurangkan dari satu sama lain karena - operator akan memaksa mereka ke Numbers.
RobG
3
getTime diperlukan jika Anda menggunakan naskah, itu tidak memungkinkan operasi aritmatika antara elemen selain, nomor atau enum
zaffaste
Anda dapat menggunakan .valueOf(), itulah yang -akan disebut oleh operator dalam hal apa pun ...
Heretic Monkey
1
bagaimana kalau kita membutuhkan perbedaan waktu jam / menit juga ...? Haruskah saya membaginya dengan 60 atau lebih dari itu ...? @Juan
gumuruh
Harap tambahkan keraguan baru sebagai pertanyaan individual, tetapi karena pertanyaan ini mungkin akan ditutup sebagai duplikat, lihat di sini stackoverflow.com/questions/1322732/…
Juan Cortés
5

Anda dapat menggunakan new Date().getTime()untuk mendapatkan cap waktu. Kemudian Anda dapat menghitung perbedaan antara ujung dan mulai dan akhirnya mengubah timestamp yang msmenjadi s.

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

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);
Georgian-Sorin Maxim
sumber
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>
Abdulrahman A Alkhodairi
sumber
1

Kode di bawah ini akan memberikan perbedaan waktu dalam detik.

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 );
Gautam Rai
sumber
0

coba gunakan fungsi khusus dari bahasa pemrograman tingkat tinggi. JavaScript .getSeconds();cocok di sini:

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);
Gilbert Cut
sumber
0

perbedaan waktu antara sekarang dan 10 menit kemudian menggunakan momentjs

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;
Surya Singh
sumber