Получить разницу во времени между двумя датами в секундах


149

Я пытаюсь получить разницу между двумя датами в секундах. Логика будет такой:

  • установить начальную дату, которая будет сейчас;
  • установить конечную дату, которая будет начальной датой плюс некоторое количество секунд в будущем (например, 15)
  • получить разницу между этими двумя (количество секунд)

Причина, по которой я делаю это с датами, заключается в том, что конечная дата / время зависят от некоторых других переменных и никогда не меняются (это зависит от того, насколько быстро пользователь что-то делает), и я также храню начальную дату для других вещей.

Я пытался что-то вроде этого:

var _initial = new Date(),
    _initial = _initial.setDate(_initial.getDate()),
    _final = new Date(_initial);
    _final = _final.setDate(_final.getDate() + 15 / 1000 * 60);

var dif = Math.round((_final - _initial) / (1000 * 60));

Дело в том, что я никогда не получаю правильную разницу. Я попытался разделить, 24 * 60что оставило бы меня с секундами, но я никогда не понимаю это правильно. Так что же не так с моей логикой? Возможно, я совершаю какую-то глупую ошибку, так как уже поздно, но меня беспокоит, что я не могу заставить ее работать :)


2
Порядок операций является ключевым.
Дилан Кросс

1
Таким образом, вы хотели бы иметь временную метку, добавить 15 секунд и посмотреть, какая разница в секундах. Я бы сказал, что высока вероятность того, что разница будет .... ждать ... 15 секунд?
Adeneo 15.12.12


1
Я действительно понимаю, что вы пытаетесь сделать (я думаю), но если вы возьмете новую Date (), которая сейчас является временем Unix, добавьте 15 секунд, и сразу же проверьте разницу, разница будет 15 секунд (минус миллисекунды, которые потребовались для вычисления), но я предполагаю, что вы намереваетесь как-то сравнить это в будущем.
Adeneo

1
Я не совсем понимаю, чтобы доказать свою точку зрения, вот работающая FIDDLE для вашего примера выше. Если вы пытаетесь выяснить, сколько времени потребовалось пользователю, чтобы сделать что-то, вы обычно получаете метку времени, когда пользователь начинает операцию, и метку времени, когда пользователь завершил операцию, и сравниваете их, и вы знаете, сколько времени это заняло. , Какого черта 15 секунд?
Аденео

Ответы:


283

Код

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

Или даже проще, (endDate - startDate) / 1000как указано в комментариях, если вы не используете машинопись.


Объяснение

Вам нужно вызвать getTime()метод для Dateобъектов, а затем просто вычесть их и разделить на 1000 (так как изначально это в миллисекундах). Кроме того, когда вы вызываете getDate()метод, вы фактически получаете день месяца как целое число от 1 до 31 (не на основе нуля), а не время, которое вы получили бы при вызове getTime()метода, представляет количество миллисекунд с 1 января 1970 года, 00:00


декламация

В зависимости от ваших операций, связанных с датой, вы можете захотеть инвестировать в интеграцию библиотеки, такой как date.js или moment.js, которая значительно упрощает работу разработчика, но это только вопрос личных предпочтений.

Например, в moment.js мы бы сделали, moment1.diff(moment2, "seconds")что красиво.


Полезные документы для этого ответа


15
Нет необходимости в getTIme , даты можно вычитать друг из друга, так как оператор - приводит их к числам.
RobG

3
getTime необходим, если вы используете машинопись, он не разрешает арифметическую операцию между элементами, отличными от любого, числа или перечисления
zaffaste

Вы можете использовать .valueOf(), что -оператор будет называть в любом случае ...
Еретик Обезьяна

1
как насчет того, если нам понадобится разница во времени час / минута ...? Должен ли я разделить его на 60 или несколько ...? @Juan
gumuruh

Пожалуйста, добавьте новые сомнения как отдельные вопросы, но поскольку этот вопрос, вероятно, будет закрыт как дубликат, посмотрите здесь stackoverflow.com/questions/1322732/…
Хуан Кортес

5

Вы можете использовать new Date().getTime()для получения меток времени. Затем вы можете вычислить разницу между концом и началом и, наконец, преобразовать временную метку msв s.

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);

4
<script type="text/javascript">
var _initial = '2015-05-21T10:17:28.593Z';
var fromTime = new Date(_initial);
var toTime = new Date();

var differenceTravel = toTime.getTime() - fromTime.getTime();
var seconds = Math.floor((differenceTravel) / (1000));
document.write('+ seconds +');
</script>

1

Ниже код даст разницу во времени в секундах.

var date1 = new Date(); // current date
var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second

alert(timeDiffInSecond );

0

Попробуйте использовать специальные функции из языков программирования высокого уровня. JavaScript .getSeconds();подходит здесь:

var specifiedTime = new Date("November 02, 2017 06:00:00");
var specifiedTimeSeconds = specifiedTime.getSeconds(); 

var currentTime = new Date();
var currentTimeSeconds = currentTime.getSeconds(); 

alert(specifiedTimeSeconds-currentTimeSeconds);

0

разница во времени между сейчас и 10 минутами позже, используя момент

let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');

let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
let diff_seconds = diff_milliseconds * 1000;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.