如何求时、分、秒和毫秒的平均数?例如,如何用整数除以时间戳?

问题描述 投票:0回答:1

以下列格式给出一个时间戳 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>
javascript html
1个回答
1
投票

如果我对你的问题理解正确的话,一种方法是将时间转换为最小的单位(本例中为毫秒),然后除以任何数字,再转换回时间戳。

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" />
© www.soinside.com 2019 - 2024. All rights reserved.