Получить текущую дату / время в секундах


Ответы:


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

.... даст вам секунды с полуночи, 1 января 1970 года

Ссылка


13
Хотя это точно, когда это будет полезно? :)
Ник Крейвер

6
@ Ник - Я думаю, что все примеры обязательно умозрительны и будут звучать надуманными - но я сделаю снимок :) Предположим, у вас есть время данных с меткой времени unix, и вы хотите определить его возраст. Более того, хотя я думаю, что это, скорее всего, означает «текущая дата / время в секундах»; только мое внутреннее чувство.
sje397 30.09.10

3
Приложение, где мне это было нужно, работало с PHP-сервером, так как функция time () уже возвращает это. Это также отлично подходит для отметки времени, поскольку вы можете легко получить разницу между 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.