Как я могу рассчитать разницу между двумя значениями в 24-часовом формате и разными датами? - PullRequest
0 голосов
/ 06 января 2020

В JavaScript, как я могу вычислить разницу между двумя значениями в 24-часовом формате с разными датами?

Пример: Date1 - 2019/12/31 11:00:06 AM Дата 2: 2020/01/01 01:10:07 вечера. Разница во времени должна быть 02:10:13 в формате чч: мм: сс .. как это может быть при изменении даты в appscrit

Ответы [ 2 ]

1 голос
/ 06 января 2020

Просто используйте Дата

const dateDiffMs = (date1,date2 ) => {
    const d1 = new Date(date1);
    const d2 = new Date(date2);
    return d1.getTime() - d2.getTime()
}

const ms2hms = (ms) => {
    const sec = Math.floor(ms / 1000)
    const min = Math.floor(sec / 60)
    const h = Math.floor(min / 60)

    return [
        h,
        min % 60,
        sec % 60,
    ];
};

const format = (n) => n < 10 ? '0' + n : n;

const hms2str = ([h, min, sec]) => {
    return `${h}:${format(min)}:${format(sec)}`
}

alert(hms2str(ms2hms(dateDiffMs('2020/01/01 01:10:07 PM', '2019/12/31 11:00:06 AM')))); // 26:10:01

Этот код работает правильно, если и date1, и date2 находятся в одном часовом поясе. Но я бы порекомендовал вам использовать момент. js или какую-то другую библиотеку

0 голосов
/ 06 января 2020

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

Затем вам потребуется преобразовать ее обратно в формат даты, который я предполагаю:

(function(){

	var dateOneSeconds = new Date().getTime() / 1000;

	setTimeout(function(){

		var dateTwoSeconds = new Date().getTime() / 1000;

		var seconds = dateTwoSeconds - dateOneSeconds;

		console.log(seconds);

		var timeDifferenceInDate = new Date(seconds * 1000).toISOString().substr(11, 8);

		console.log(timeDifferenceInDate);

	}, 3000);

})();

ПРИМЕЧАНИЕ. Я использовал функцию тайм-аута - у вас уже будет две даты, которые не соответствуют всплывающим.

РЕДАКТИРОВАТЬ: Получив уведомление, дни не будут рассчитаны, возможно, вы можете использовать дату, чтобы рассчитать время в секундах, а затем использовать Math для создания вашего дисплея:

(function(){

	var dateOneSeconds = new Date().getTime() / 1000;

	setTimeout(function(){

		var dateTwoSeconds = new Date().getTime() / 1000;

		var seconds = dateTwoSeconds - dateOneSeconds;

		console.log(seconds);

		/* var timeDifferenceInDate = new Date(seconds * 1000).toISOString().substr(11, 8); */

		seconds = Number(seconds);
		var d = Math.floor(seconds / (3600*24));
		var h = Math.floor(seconds % (3600*24) / 3600);
		var m = Math.floor(seconds % 3600 / 60);
		var s = Math.floor(seconds % 60);

		timeDifferenceInDate = d + ':' + h + ':' + m + ':' + s;

		console.log(timeDifferenceInDate);

	}, 3000);

})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...