Dapatkan tanggal / waktu saat ini dalam hitungan detik


Jawaban:


457
var seconds = new Date().getTime() / 1000;

.... akan memberi Anda detik sejak tengah malam, 1 Januari 1970

Referensi


13
Meskipun ini akurat, kapan akan berguna? :)
Nick Craver

6
@Nick - Saya pikir semua contoh harus spekulatif dan akan terdengar dibuat-buat - tapi saya akan mengambil gambar :) Misalkan Anda memiliki waktu data dicap dengan waktu unix, dan ingin menentukan usianya. Lebih dari itu saya pikir inilah yang paling mungkin dimaksud dengan 'tanggal / waktu saat ini dalam detik'; hanya firasatku.
sje397

3
Aplikasi tempat saya membutuhkan ini adalah untuk bekerja dengan PHP back end karena fungsi time () sudah mengembalikan ini. Ini juga bagus untuk cap waktu karena Anda dapat dengan mudah mendapatkan perbedaan antara waktu () menjadi waktu kita saat ini dan cap waktu dari waktu sebelumnya yang telah disimpan dalam database mengatakan ketika pengguna memposting sesuatu. Jika Anda ingin mendapatkan waktu yang diformat seperti '22 Oktober 2015', Anda dapat menyusun fungsi Anda sendiri untuk mengembalikannya dari cap waktu sebagai argumen atau menggunakan yang sudah ada di sini di Stack. Bagaimanapun, harapan yang memberi Anda wawasan kapan ini akan berguna. @NickCraver
uhfocuz

21
Perlu dicatat bahwa Anda ingin membungkusnya dalam Math.floor (), kalau tidak Anda mendapatkan desimal.
David Webber

11
Salah satu cara ini akan berguna adalah menghitung waktu yang telah berlalu antara dua kali.
Zac


65

Menggunakan new Date().getTime() / 1000adalah solusi yang tidak lengkap untuk mendapatkan detik, karena menghasilkan cap waktu dengan unit floating-point.

const timestamp = new Date() / 1000; // 1405792936.933
// Technically, .933 would be milliseconds. 

Solusi yang lebih baik adalah:

// Rounds the value
const timestamp = Math.round(new Date() / 1000); // 1405792937

// - OR -

// Floors the value
const timestamp = new Date() / 1000 | 0; // 1405792936

Nilai tanpa pelampung juga lebih aman untuk pernyataan bersyarat, karena pelampung dapat menghasilkan hasil yang tidak diinginkan. Granularitas yang Anda dapatkan dengan float mungkin lebih dari yang dibutuhkan.

if (1405792936.993 < 1405792937) // true

1
Sepenuhnya setuju 👍 GunakanMath.round(new Date() / 1000)
gdibble

37

Berdasarkan komentar Anda, saya pikir Anda sedang mencari sesuatu seperti ini:

var timeout = new Date().getTime() + 15*60*1000; //add 15 minutes;

Kemudian di cek Anda, Anda memeriksa:

if(new Date().getTime() > timeout) {
  alert("Session has expired");
}

16

Untuk mendapatkan jumlah detik dari zaman Javascript, gunakan:

date = new Date();
milliseconds = date.getTime();
seconds = milliseconds / 1000;

9

// The Current Unix Timestamp
// 1443535752 seconds since Jan 01 1970. (UTC)

// Current time in seconds
console.log(Math.floor(new Date().valueOf() / 1000));  // 1443535752
console.log(Math.floor(Date.now() / 1000));            // 1443535752
console.log(Math.floor(new Date().getTime() / 1000));  // 1443535752
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

jQuery

console.log(Math.floor($.now() / 1000));               // 1443535752
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


3

Solusi JavaScript ini memberi Anda milidetik atau detik sejak tengah malam, 1 Januari 1970.

Solusi IE 9+ (IE 8 atau versi yang lebih lama tidak mendukung ini.):

var timestampInMilliseconds = Date.now();
var timestampInSeconds = Date.now() / 1000; // A float value; not an integer.
    timestampInSeconds = Math.floor(Date.now() / 1000); // Floor it to get the seconds.
    timestampInSeconds = Date.now() / 1000 | 0; // Also you can do floor it like this.
    timestampInSeconds = Math.round(Date.now() / 1000); // Round it to get the seconds.

Untuk mendapatkan informasi lebih lanjut tentang Date.now(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now

Solusi umum:

// ‘+’ operator makes the operand numeric.
// And ‘new’ operator can be used without the arguments ‘(……)’.
var timestampInMilliseconds = +new Date;
var timestampInSeconds = +new Date / 1000; // A float value; not an intger.
    timestampInSeconds = Math.floor(+new Date / 1000); // Floor it to get the seconds.
    timestampInSeconds = +new Date / 1000 | 0; // Also you can do floor it like this.
    timestampInSeconds = Math.round(+new Date / 1000); // Round it to get the seconds.

Berhati-hatilah untuk menggunakannya, jika Anda tidak menginginkan sesuatu seperti kasing ini.

if(1000000 < Math.round(1000000.2)) // false.

2
Date.now()-Math.floor(Date.now()/1000/60/60/24)*24*60*60*1000

Ini akan memberi Anda milidetik sejak awal hari.

(Date.now()-Math.floor(Date.now()/1000/60/60/24)*24*60*60*1000)/1000

Ini akan memberi Anda waktu sebentar.

(Date.now()-(Date.now()/1000/60/60/24|0)*24*60*60*1000)/1000

Sama seperti sebelumnya kecuali menggunakan operator bitwise untuk mengurangi jumlah hari.


1

Anda dapat bertemu dengan cara lain untuk mendapatkan waktu dalam detik / milidetik sejak 1 Jan 1970:

var milliseconds = +new Date;        
var seconds = milliseconds / 1000;

Tapi hati-hati dengan pendekatan seperti itu, karena mungkin sulit untuk membaca dan memahaminya.


Saya tidak tahu karena ketika menggunakan efek samping bahasa adalah cara yang lebih elegan.
tomazahlin

1

Jalan pintas yang lebih baik:

+new Date # Milliseconds since Linux epoch
+new Date / 1000 # Seconds since Linux epoch
Math.round(+new Date / 1000) #Seconds without decimals since Linux epoch

0

Pada suatu hari di tahun 2020, di dalam Chrome 80.0.3987.132, ini memberi 1584533105

~~(new Date()/1000) // 1584533105
Number.isInteger(~~(new Date()/1000)) // true

-1

Untuk mendapatkan detik total hari ini:

getTodaysTotalSeconds(){
    let date = new Date();        
    return +(date.getHours() * 60 * 60) + (date.getMinutes() * 60);
}

Saya telah menambahkan +balasan yang kembali int. Ini dapat membantu pengembang lain. :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.