Javascript - конвертировать ДД: ЧЧ: ММ: СС в миллисекунды - PullRequest
0 голосов
/ 21 ноября 2018

Я видел много функций для конвертации дат, но не смог найти ничего конкретного о том, как конвертировать Дни: Часы: Минуты: Секунды в миллисекунды.

Итак, вот основная функция, которую я сделал, чтобы помочь вам, ребята.Это полезно, если вы кодируете секундомер, часы или что-то в этом роде.

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Обычно я видел, как это делается встроенно без использования служебной функции, но если вы собираетесь создать утилиту, давайте сделаем ее расширяемой.

  1. Я не согласен с аргументами Array, трудно вспомнить, что и что представляет.Если вы только делаете день / час / минуту / секунду, это может сбить с толку.Кроме того, если вы не всегда используете каждый параметр, это становится громоздким.

  2. Это неверно для нулевых значений (пропуск 0 для любого значения приводит к его неправильности)

const conversionTable = {
  seconds: 1000,
  minutes: 60*1000,
  hours: 60*60*1000,
  days: 24*60*60*1000,
};

const convertTime = (opts) => 
  Object.keys(opts).reduce((fin, timeKey) => (
    fin + opts[timeKey] * conversionTable[timeKey]
  ), 0)

console.log(convertTime({
  days: 5,
  hours: 4,
  minutes: 2,
  seconds: 19,
}));

console.log(convertTime({seconds: 1}));
0 голосов
/ 21 ноября 2018

Полагаю, простое решение - использовать метод разбора объекта Date, который возвращает миллисекунды объекта.Суть в том, что он предназначен для возврата времени от времени эпохи UNIX.

// see docs for Date constructor
const baseDate = new Date(0,0,0,0,0,0,0);
const baseMS = Date.parse(baseDate);

// base milliseconds is not zero
// it defaults to a day before Jan 1, 1970 in ms
console.log(baseMS);

function convertToMS(dy,hr,mn,s,ms) {
  const date = new Date(0,0,dy,hr,mn,s,ms);
  const dateMS = Date.parse(date);
  return dateMS - baseMS;
}

// one day in milliseconds
console.log(convertToMS(1,0,0,0,0));
console.log(24 * 60 * 60 * 1000);

PS Я не совсем понимаю логику, почему новый объект Date с нулем во всехПараметры возвращают большое отрицательное значение, но мы должны учесть это в коде.

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

0 голосов
/ 21 ноября 2018
  function convertDhms(d,h,m,s){
    d <= 0 ? d=1 : d=d*24*60*60*1000;
    h <= 0 ? h=1 : h=h*60*60*1000;
    m <= 0 ? m=1 : m=m*60*1000;
    s <= 0 ? s=1 : s=s*1000;

    return d + h + m + s;
  }

Использование:

var finalDate = convertDhms(5, 4, 2, 19); /* will convert 5 days, 4 hours, 2 minutes and 19 seconds to miliseconds. Keep in mind that the limit to hours is 23, minutes 59 and seconds 59. Days have no limits. */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...