Я вычисляю разницу между двумя датами, для которых есть много разных примеров. Возвращаемое время выражается в миллисекундах, поэтому мне нужно преобразовать его во что-то более полезное.
Большинство примеров относятся к дням: часам: минутам: секундам или часам: минутам, но мне нужны дни: часы: минуты , поэтому секунды следует округлить до минут.
Метод, который я сейчас использую, приближается, но показывает 3 дня как 2.23.60, тогда как должно показывать 3.00.00, так что что-то не так. Поскольку я только что взял текущий код из примера в Интернете, я открыт для предложений по другим способам сделать это.
Я получаю время в миллисекундах, вычитая дату начала из даты окончания следующим образом: -
date1 = new Date(startDateTime);
date2 = new Date(endDateTime);
ms = Math.abs(date1 - date2)
Мне нужно взять переменную ms и преобразовать ее в days.hours: minutes.
Вот мое решение в, Реагируют с moment.js
https://codesandbox.io/s/milliseconds-to-human-readable-text-with-momentjs-in-react-0pgmq
import React from "react";
import ReactDOM from "react-dom";
import moment from "moment";
import "../styles.css";
function App() {
const oneSecondInMillis = 1000;
const oneMinuteInMillis = 60000;
const oneHourInMillis = 3.6e6;
const oneDayInMillis = 8.64e7;
const oneMonthMillis = 2.628e9;
const oneYearInMillis = 3.154e10; //3.154e10;
const createTime = millis => new moment.duration(millis);
const millisToReadable = millis => {
let result = "";
if (typeof millis !== "number") return "0 ms";
let time = createTime(millis);
let years = Math.floor(time.asYears());
millis = millis - years * oneYearInMillis;
time = createTime(millis);
let months = Math.floor(time.asMonths());
millis = millis - months * oneMonthMillis;
time = createTime(millis);
let days = Math.floor(time.asDays());
millis = millis - days * oneDayInMillis;
time = createTime(millis);
let hours = Math.floor(time.asHours());
millis = millis - hours * oneHourInMillis;
time = createTime(millis);
let minutes = Math.floor(time.asMinutes());
millis = millis - minutes * oneMinuteInMillis;
time = createTime(millis);
let seconds = Math.floor(time.asSeconds());
millis = millis - seconds * oneSecondInMillis;
time = new moment.duration(millis);
let milliseconds = Math.floor(time.asMilliseconds());
if (years > 0) {
result += ` ${years} y`;
}
if (years > 0 || months > 0) {
result += ` ${months} m`;
}
if (years > 0 || months > 0 || days > 0) {
result += ` ${days} d`;
}
if (years > 0 || months > 0 || days > 0 || hours > 0) {
result += ` ${hours} h`;
}
if (years > 0 || months > 0 || days > 0 || hours > 0 || minutes > 0) {
result += ` ${minutes} m`;
}
if (
years > 0 ||
months > 0 ||
days > 0 ||
hours > 0 ||
minutes > 0 ||
seconds > 0
) {
result += ` ${seconds} s`;
}
result += ` ${milliseconds} ms`;
return result;
};
const millis =
2 * oneYearInMillis +
7 * oneMonthMillis +
20 * oneDayInMillis +
10 * oneHourInMillis +
8 * oneMinuteInMillis +
50 * oneSecondInMillis +
95;
const result = millisToReadable(millis);
return (
<div className="App">
<h1>Milliseconds to Human Readable Text</h1>
<h2>{millis}</h2>
<h2>{result}</h2>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);