Javascript показывает миллисекунды как дни: часы: минуты без секунд

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

Большинство примеров относятся к дням: часам: минутам: секундам или часам: минутам, но мне нужны дни: часы: минуты , поэтому секунды следует округлить до минут.

Метод, который я сейчас использую, приближается, но показывает 3 дня как 2.23.60, тогда как должно показывать 3.00.00, так что что-то не так. Поскольку я только что взял текущий код из примера в Интернете, я открыт для предложений по другим способам сделать это.

Я получаю время в миллисекундах, вычитая дату начала из даты окончания следующим образом: -

date1 = new Date(startDateTime);
date2 = new Date(endDateTime);
ms = Math.abs(date1 - date2)

Мне нужно взять переменную ms и преобразовать ее в days.hours: minutes.

18
задан S.L. Barth - Reinstate Monica 16 August 2012 в 13:31
поделиться

1 ответ

Вот мое решение в, Реагируют с 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);
0
ответ дан 30 November 2019 в 06:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: