Как вы в среднем часов, минут, секунд и миллисекунд? Например, как вы делите временную метку на целое число? - PullRequest
1 голос
/ 23 апреля 2020

Дайте метку времени в формате hh:mm:ss.SSS, как разделить эту метку времени на целое число и получить метку времени в качестве результата?

Например, если дана метка времени 00:03:00:090, если я разделите это на 3, я бы ожидал получить отметку времени 00:01:00:030.

Если бы у меня была отметка времени 00:05:35:100 и разделить ее на 3, я бы ожидал 00:01:51:700 как результат. Если бы я разделил на 2, я бы ожидал 00:02:47:550 в результате.

     $(window).on("load", function() {
          $('#Btn_Calculate_Average').click(function (e) { 
               e.preventDefault();
               
               Average();
          });

         function Average(){
               let in_Time = $('#in_Time').val();
               let in_valueSelected = $('#in_valueSelected').val();

               var Average = in_Time / in_valueSelected;

               $('#in_Result').val(Average);
         }
          
     });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
               <div class="Dv">
                    <label for="in_Time">Time</label>
                    <input type="text" id="in_Time" value="00:05:35:100" >
               </div>

               <label  for="in_valueSelected">Divide By:</label>
               <input   name="in_valueSelected" id="in_Média"  type="text" value="3" list="lsit_valueSelected">
               <datalist id="lsit_valueSelected">
                    <option value="1">
                    <option value="2">
                    <option value="3">
                    <option value="4">
                    <option value="5">
                    <option value="6">
                    <option value="7">
               </datalist>
              
               <button id="Btn_Calculate_Average">Calculate Average</button>

               <div class="Dv">
                    <label for="in_Result">Media</label>
                    <input type="text" id="in_Result" value="" >
               </div>
          </div>

Разрешение

$(window).on("load", function () {
               const toMilliseconds = (timestamp) => {
                    let [hours, minutes, seconds, milliseconds] = timestamp.split(':')
                    hours = +hours
                    minutes = +minutes
                    seconds = +seconds
                    milliseconds = +milliseconds
                    console.log(hours, minutes, seconds, milliseconds)
                    return (hours * 3.6e6) + (minutes * 60000) + (seconds * 1000) + milliseconds
               }
               const toTimestamp = (ms) => {
                    const hours = Math.floor(ms / 3.6e6)
                    ms = ms % 3.6e6
                    const minutes = Math.floor(ms / 60000)
                    ms = ms % 60000
                    const seconds = Math.floor(ms / 1000)
                    ms = ms % 1000
                    return `${hours}:${minutes}:${seconds}:${ms}`
               }
               // var in_Time = $('#in_Time').val();
               // let in_valueSelected = $('#in_valueSelected').val();
               $('#Btn_Calculate_Average').click(function (e) {

                    var ResultadoDaMedia =  toTimestamp(toMilliseconds($('#in_Time').val()) / $('#in_valueSelected').val())

                    $('#in_Result').val(ResultadoDaMedia)
                    console.log(ResultadoDaMedia)
               })
               // var DIVISER = 
               // input.addEventListener('input', e => {
               //           console.log(output.textContent = toTimestamp(toMilliseconds(input.value) / 2));
               // }) 
          });
body {
     background-color: rgba(255, 255, 255, 1);
     margin: 0px; padding: 0px;
     height: 100vh; width: 100%;
     display: flex; flex-direction: column;
     align-items: center; justify-content: flex-start;
     overflow: scroll;
}


.container {
    background-color: rgb(255, 255, 255);
    margin: 5px; padding: 5px;
    min-height: 500px; width: 100%;
    max-height: 64px;
    display: flex; flex-direction: column;
    align-items:center; justify-content: flex-start;
    overflow: scroll;

}
.Dv {
    background-color: rgb(255, 255, 255);
    margin: 5px; padding:10px;
    height: auto; width: 100%;
    display: flex; flex-direction: column;
    align-items: center; justify-content: center;
    overflow: hidden; 

}



label, button{
     margin: 4px;

}

input {
     margin: 4px;
     max-width: 150px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
          <div class="Dv">
               <label for="in_Time">Time</label>
               <input type="text" id="in_Time" value="00:05:35:100">
          </div>

          <label for="in_valueSelected">Divide By:</label>
          <input name="in_valueSelected" id="in_valueSelected" type="text" list="lsit_valueSelected">
          <datalist id="lsit_valueSelected">
               <option value="1">
               <option value="2">
               <option value="3">
               <option value="4">
               <option value="5">
               <option value="6">
               <option value="7">
          </datalist>

          <button id="Btn_Calculate_Average">Calculate Average</button>

          <div class="Dv">
               <label for="in_Result">Media</label>
               <input type="text" id="in_Result" value="">
          </div>
     </div>

1 Ответ

1 голос
/ 23 апреля 2020

Если я правильно понимаю ваш вопрос, один из способов достижения sh - это преобразовать время в наименьшую единицу (в данном случае в миллисекунды), затем разделить на любое число, а затем преобразовать обратно в метку времени:

const toMilliseconds = (timestamp) => {
  let [
    hours, minutes, seconds, milliseconds
  ] = timestamp.split(':')
  hours = +hours
  minutes = +minutes
  seconds = +seconds
  milliseconds = +milliseconds
  return (hours * 3.6e6)
    + (minutes * 60000)
    + (seconds * 1000)
    + milliseconds
}

const toTimestamp = (ms) => {
  const hours = ('' + Math.floor(ms / 3.6e6)).padStart(2, '0')
  ms = ms % 3.6e6
  const minutes = ('' + Math.floor(ms / 60000)).padStart(2, '0')
  ms = ms % 60000
  const seconds = ('' + Math.floor(ms / 1000)).padStart(2, '0')
  ms = ('' + Math.floor(ms % 1000)).padStart(3, '0')
  return `${hours}:${minutes}:${seconds}:${ms}`
}

const average = (timestamp, diviser) => {
  return toTimestamp( toMilliseconds(timestamp) / diviser )
}

const input = document.querySelector('#input')
const output = document.querySelector('#output')

const DIVISER = 3
input.addEventListener('input', e => {
  output.textContent = average(input.value, DIVISER)
})
<input id="input" />
<div id="output" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...