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

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

  • установите начальную дату, которая будет теперь;
  • установите окончательную дату, которая будет начальной датой плюс некоторое количество секунд в будущем (скажем, например, 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, который оставил бы меня с секундами, но я никогда не ошибаюсь. Так что же с моей логикой? Я могу совершить какую-то глупую ошибку, поскольку это довольно поздно, но меня беспокоит, что я не могу заставить ее работать:)

Ответ 1

Код

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

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


Объяснение

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


Рант

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

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


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

Ответ 2

<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>

Ответ 3

Вы можете использовать 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

попробуйте использовать специальные функции из языков программирования высокого уровня. 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);

Ответ 5

разница времени между теперь и 10 минутами позже с использованием momentjs

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;

Ответ 6

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

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 );