Отримати поточну дату / час у секундах


Відповіді:


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

.... дасть вам секунди з півночі, 1 січня 1970 року

Довідково


13
Хоча це точно, коли це коли-небудь стане в нагоді? :)
Нік Крейвер

6
@ Nick - Я думаю, що всі приклади обов'язково умоглядні, і це буде надумано - але я сфотографую :) Припустимо, у вас є час з печаткою unix time, і хочете визначити його вік. Більше того, я думаю, що саме це, мабуть, означає «поточна дата / час у секундах»; просто моє відчуття кишки.
sje397

3
Додаток, де мені це було потрібно, було працювати з зворотним кінцем PHP, оскільки функція time () вже повертає це. Це також чудово підходить для позначки часу, оскільки ви можете легко отримати різницю між часом (), який є нашим поточним часом, і тимчасовим відміткою часу, що зберігався в базі даних, наприклад, коли користувач щось розмістив. У випадку, якщо ви хочете отримати відформатований час на зразок "22 жовтня 2015 року", ви можете створити власну функцію, щоб повернути її з часової позначки як аргумент або використовувати її вже тут у стеці. У будь-якому випадку, сподівайтеся, що ви дасте деяке уявлення про те, коли це буде корисно. @NickCraver
uhfocuz

21
Варто зазначити, що ви хочете обернути це в Math.floor (), інакше ви отримаєте десятковий.
Девід Веббер

11
Одним із способів цього було б корисно - обчислення часу, що минув між двома разів.
Зак


65

Використання new Date().getTime() / 1000є неповним рішенням для отримання секунд, оскільки воно створює часові позначки з одиницями з плаваючою комою.

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

Кращим рішенням буде:

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

// - OR -

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

Значення без поплавків також безпечніші для умовних тверджень, оскільки поплавок може призвести до небажаних результатів. Зернистість, яку ви отримуєте з поплавком, може бути більше, ніж потрібно.

if (1405792936.993 < 1405792937) // true

1
Цілком погоджуюсь 👍 ВикористанняMath.round(new Date() / 1000)
gdibble

37

На основі вашого коментаря, я думаю, ви шукаєте щось подібне:

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

Потім у вашому чеку ви перевіряєте:

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

16

Щоб отримати кількість секунд від епохи Javascript, використовуйте:

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

Ці рішення JavaScript дають вам мілісекунд або секунди з півночі 1 січня 1970 року.

Рішення IE 9+ (IE 8 або старіша версія не підтримує це.):

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.

Щоб отримати більше інформації про Date.now(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now

Загальне рішення:

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

Будьте обережні, якщо не хочете чогось подібного.

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

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

Це має дати вам мілісекунд з початку дня.

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

Це має дати вам секунди.

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

Те саме, що і попереднє, за винятком випадків, коли використовується оператор побітових операцій, щоб зменшити кількість днів.


1

Ви можете зустріти інший спосіб отримати час у секундах / мілісекундах з 1 січня 1970 року:

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

Але будьте обережні з таким підходом, тому що прочитати та зрозуміти це може бути складно.


Я не знаю, оскільки при використанні мови побічні ефекти - це більш елегантний спосіб.
томазахлін

1

Кращі скорочення:

+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

В якийсь день 2020 року в Chrome 80.0.3987.132 це дає змогу 1584533105

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

-1

Щоб отримати загальну кількість секунд дня:

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

Я маю додати +взамін, які повертаються int. Це може допомогти іншим розробникам. :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.