как рассчитать прошедшее время в JavaScript в читаемом формате - PullRequest
0 голосов
/ 28 мая 2018

Скажите, у меня есть что-то вроде этого:

var time01 = new Date();
var time02 = new Date(2015, 0, 0, 0, 0, 0);
var time03 = new Date(2022, 0, 0, 0, 0, 0);

Если я хочу рассчитать время, прошедшее с time02 до сегодняшнего дня, и сколько времени осталось до time03 с этого момента, я должен сделатьэто:

var passed01 = time01.getTime() - time02.getTime();
var passed02 = time03.getTime() - time01.getTime();

И затем, я хочу сделать его читабельным, и я делаю:

var readable01 = new Date(passed01);
var readable02 = new Date(passed02);

Но это дает мне год какой-то ~ 1970 ... Как я могуполучить что-то вроде: «3 года» или «3 года и 15 дней и 17 минут и 23 секунды» или что-то подобное?

1 Ответ

0 голосов
/ 28 мая 2018

Чтобы ответить на ваш вопрос, причина, по которой ваш код дает результат 1970-х годов, связана с тем, как вы используете новую функцию Date ().Новая дата - это функция JS, которая возвращает дату UNIX любого количества раз, которое вы отправляете ей.Поскольку вы отправляете только один аргумент, этот аргумент обрабатывается как миллисекунды, и он возвращает время этого количества миллисекунд после эпохи UNIX 1 января 1970 года.

https://www.w3schools.com/js/js_dates.asp

Есть много способов конвертировать миллисекунды в дни, часы, минуты и секунды.Чтобы преобразовать в месяцы или годы, математика становится вялой из-за того, что не во всех месяцах одинаковое количество дней, високосных лет и т. Д. Вот одна функция, которую я выбрал и использовал (я забыл источник, чтобы дать правильную атрибуцию)

function convertMS(ms) {
  var d, h, m, s;
  s = Math.floor(ms / 1000);
  m = Math.floor(s / 60);
  s = s % 60;
  h = Math.floor(m / 60);
  m = m % 60;
  d = Math.floor(h / 24);
  h = h % 24;
  return d + " days, " + h + " hours, " + m + " minutes, " + s + " seconds.";
};

document.getElementById("time").innerHTML = convertMS(8000000000);
<div id="time"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...