Nhận ngày / giờ hiện tại tính bằng giây


Câu trả lời:


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

.... sẽ cho bạn vài giây kể từ nửa đêm, ngày 1 tháng 1 năm 1970

Tài liệu tham khảo


13
Trong khi điều này là chính xác, khi nào nó sẽ hữu ích? :)
Nick Craver

6
@Nick - Tôi nghĩ rằng tất cả các ví dụ nhất thiết phải là đầu cơ và sẽ nghe có vẻ khó hiểu - nhưng tôi sẽ chụp :) Giả sử bạn có thời gian dữ liệu được đóng dấu với thời gian unix và muốn xác định tuổi của nó. Mặc dù tôi nghĩ rằng đây là những gì rất có thể có nghĩa là 'ngày / giờ hiện tại tính bằng giây'; chỉ là cảm giác ruột của tôi.
sje394

3
Một ứng dụng mà tôi cần điều này là để làm việc với một back end PHP vì hàm time () đã trả về cái này. Thật tuyệt vời cho dấu thời gian vì bạn có thể dễ dàng nhận được sự khác biệt giữa thời gian () là thời gian hiện tại của chúng tôi và dấu thời gian từ thời điểm trước đó được lưu trữ trong cơ sở dữ liệu cho biết khi người dùng đăng nội dung nào đó. Trong trường hợp bạn muốn có thời gian được định dạng như 'ngày 22 tháng 10 năm 2015', bạn có thể tạo chức năng của riêng mình để trả về chức năng đó từ dấu thời gian làm đối số hoặc sử dụng một thời gian đã có tại Stack. Dù sao, hy vọng rằng cung cấp cho bạn một cái nhìn sâu sắc khi điều này sẽ hữu ích. @NickCraver
uhfocuz

21
Điều đáng chú ý là bạn muốn gói nó trong Math.floor (), nếu không bạn sẽ nhận được một số thập phân.
David Webber

11
Một cách này sẽ hữu ích là tính thời gian trôi qua giữa hai lần.
Zac


65

Sử dụng new Date().getTime() / 1000là một giải pháp không đầy đủ để có được giây, bởi vì nó tạo ra dấu thời gian với các đơn vị dấu phẩy động.

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

Một giải pháp tốt hơn sẽ là:

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

// - OR -

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

Các giá trị không có float cũng an toàn hơn cho các câu điều kiện, vì float có thể tạo ra kết quả không mong muốn. Độ chi tiết bạn có được với một số float có thể nhiều hơn mức cần thiết.

if (1405792936.993 < 1405792937) // true

1
Hoàn toàn đồng ý Sử dụngMath.round(new Date() / 1000)
gdibble

37

Dựa trên nhận xét của bạn, tôi nghĩ bạn đang tìm kiếm thứ gì đó như thế này:

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

Sau đó, trong séc của bạn, bạn đang kiểm tra:

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

16

Để có được số giây từ kỷ nguyên Javascript, hãy sử dụng:

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

Các giải pháp JavaScript này cung cấp cho bạn một phần nghìn giây hoặc giây kể từ nửa đêm, ngày 1 tháng 1 năm 1970.

Giải pháp IE 9+ (IE 8 hoặc phiên bản cũ hơn không hỗ trợ điều này.):

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.

Để có thêm thông tin về Date.now(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now

Giải pháp chung:

// ‘+’ 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.

Hãy cẩn thận để sử dụng, nếu bạn không muốn một cái gì đó như trường hợp này.

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

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

Điều này sẽ cung cấp cho bạn một phần nghìn giây từ đầu ngày.

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

Điều này sẽ cung cấp cho bạn giây.

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

Tương tự như trước ngoại trừ sử dụng toán tử bitwise để tạo số lượng ngày.


1

Bạn có thể gặp một cách khác để có thời gian tính bằng giây / mili giây kể từ ngày 1 tháng 1 năm 1970:

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

Nhưng hãy cẩn thận với cách tiếp cận như vậy, vì có thể khó đọc và hiểu nó.


Tôi không biết từ khi sử dụng tác dụng phụ của ngôn ngữ là một cách thanh lịch hơn.
tomazahlin

1

Cắt ngắn tốt hơn:

+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

Vào một ngày nào đó vào năm 2020, bên trong Chrome 80.0.3987.132, điều này mang lại 1584533105

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

-1

Để có được tổng số giây của ngày hôm nay:

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

Tôi đã thêm +vào trả lại mà trở lại trong int. Điều này có thể giúp cho các nhà phát triển khác. :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.