Làm cách nào để có được ngày / giờ hiện tại tính bằng giây trong Javascript?
Làm cách nào để có được ngày / giờ hiện tại tính bằng giây trong Javascript?
Câu trả lời:
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
Date.now()
cho mili giây kể từ kỷ nguyên. Không cần sử dụng new
.
Kiểm tra tài liệu tham khảo tại đây: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now
(Không được hỗ trợ trong IE8.)
Sử dụng new Date().getTime() / 1000
là 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
Math.round(new Date() / 1000)
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");
}
// 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>
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.
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.
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ó.
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
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
Để 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. :)