Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何计算平均时间_Javascript_Algorithm_Datetime_Time - Fatal编程技术网

Javascript 如何计算平均时间

Javascript 如何计算平均时间,javascript,algorithm,datetime,time,Javascript,Algorithm,Datetime,Time,如何计算11:59:00 PM和12:00:00 AM的平均时间,使其可以是11:59:30 PM。目前这个密码是上午11:59:30 var convertTimeToMilliSecondsTest = function(time) { var startDate = "1970/01/01"; if(time.indexOf("AM") != -1) { n

如何计算11:59:00 PM和12:00:00 AM的平均时间,使其可以是11:59:30 PM。目前这个密码是上午11:59:30

       var convertTimeToMilliSecondsTest = function(time) {
                  var startDate = "1970/01/01";                         
       if(time.indexOf("AM") != -1) {
          newTime = time.replace("AM", " AM");
       } else if(time.indexOf("PM") != -1) {
          newTime = time.replace("PM", " PM");
       }
          var dateString = startDate + " " + newTime;
          var date = new Date(dateString.replace(/-/g, '/'));                                 
          return date.getTime();
       }

         var calculateAverageTimeToBed = function(dataset) {
                 var totalTimeInMilliSeconds = 0;

                 for(var i = 0;i < dataset.length; ++i) {
                       totalTimeInMilliSeconds += convertTimeToMilliSecondsTest(dataset[i].startTime);
                 }

                 var averageTimeInBed = totalTimeInMilliSeconds / dataset.length;

                 return averageTimeInBed;
          }
var convertTimeToMillSecondsTest=函数(时间){
var startDate=“1970/01/01”;
if(time.indexOf(“AM”)!=-1){
newTime=时间。替换(“AM”、“AM”);
}else if(time.indexOf(“PM”)!=-1){
newTime=时间。替换(“PM”、“PM”);
}
var dateString=startDate+“”+newTime;
var date=新日期(dateString.replace(/-/g,“/”);
返回日期。getTime();
}
var calculateAverageTimeToBed=函数(数据集){
var TotalTimeIn毫秒=0;
对于(变量i=0;i
在计算中使用整个日期(含天)。以下是一种方法:


这是一个函数,如果您正在寻找给定一组时间的平均时间,无论日期如何,给定24小时周期。它的工作时间是上午12点到下午12点,但不是下午12点到上午12点(因为它跨越两天)。如果您跨越天,您必须使用我的第一个答案,这要求在评估时给出整个日期

//函数将确定给定一组
//在24小时内重复3次。时段,即上午12点至下午12点
//它在24小时内不起作用。下午12时至上午12时
变量时间=['11:59:00 AM','12:00:00 AM'];
//函数接受一个时间数组作为参数
//需要按上述方式安排时间
函数getAverageTime(次){
变量计数=乘以长度
var TimesUnseconds=[];
//周而复始
对于(变量i=0;i12){
avgAmpm=‘PM’;
avgHrs=avgHrs-12;
}
//添加前导零,持续秒、分钟
avgSecs=('0'+avgSecs).slice(-2);
avgMins=('0'+avgMins).slice(-2);
//你的回答
返回avgHrs+':'+avgMins+':'+avgSecs+''+avgAmpm;
}
//执行
警报(getAverageTime(次));

这已经很老了,所以我想我会用SetFullYear()的注释发布一个snippit。它将以今天的日期返回所有日期的平均时间(小时、分钟和秒)

let dateArray=[新日期('2016年10月15日星期六07:09:00 GMT+0800(MYT)”)、新日期('2016年10月17日星期一06:48:00 GMT+0800(MYT)”、新日期('2016年10月18日星期二08:38:00 GMT+0800(MYT)];
函数getAverageTime(数组){
设和=0;
array.map(函数(d){
让我们现在=新日期();
让startDay=d.setFullYear(now.getFullYear(),now.getMonth(),now.getDate());
总和+=开始日期;
});
返回新日期(sum/dateArray.length);
}

log(getAverageTime(dateArray))假设以下情况: [23:30,00:30,01:30]如果您想要00:30的结果,则以下内容适用于您:

const ONE_DAY_IN_MILLISECONDS = 24 * 3600 * 1000;

function calculateAverageOfHours(times, minTime){
  let timestamps = times.map(getTimePartInMilliseconds);
  let minTimestamp = getTimePartInMilliseconds(minTime);
  
  let average = 0;
  timestamps.forEach(t => {
    average += getMillisecondsFromTimeTillMinTime(t, minTimestamp) / timestamps.length;
  });
  
  const millisecondsFromStartOfDay = (minTimestamp + average) % ONE_DAY_IN_MILLISECONDS;
  
  return new Date(0,0,0,
                 Math.trunc(millisecondsFromStartOfDay / (3600000)),
                 Math.trunc(millisecondsFromStartOfDay % 3600000 / (60000)),
                 Math.trunc(millisecondsFromStartOfDay % 10000 / 1000));
}

function getMillisecondsFromTimeTillMinTime(time, minTime){
  if(time < minTime){
    return ONE_DAY_IN_MILLISECONDS - minTime + time;
  }
  
  return time - minTime;
}

function getTimePartInMilliseconds(t){
  return (t.getHours() * 3600 +
         t.getMinutes() * 60 +
         t.getSeconds()) * 1000 + t.getMilliseconds();
}

// The year, month and date are not relevant.
let times = [
  new Date(2020, 8, 3, 23, 30, 0),
  new Date(2020, 9, 1, 0, 30, 0),
  new Date(2020, 9, 2, 1, 30, 0)
];

console.log(calculateAverageOfHours(times, new Date(2020,8,30,22,0,0))); 
// output: Dec 31 1899 00:30:00
const ONE_DAY_(毫秒)=24*3600*1000;
函数calculateAverageOfHours(次,分钟){
让timestamps=times.map(getTimePartInMilliseconds);
让minTimestamp=getTimePartInMilliseconds(minTime);
设平均值=0;
timestamps.forEach(t=>{
average+=Get毫秒FromTimeTillMinTime(t,minTimestamp)/timestamps.length;
});
常量毫秒fromStartOfDay=(minTimestamp+平均值)%1天(单位:毫秒);
返回新日期(0,0,0,
Math.trunc(从开始到现在的毫秒/(3600000)),
Math.trunc(从开始到当天的毫秒%3600000/(60000)),
Math.trunc(从开始到结束的毫秒%10000/1000));
}
函数GetMillisSecondsFromTimeTillMinTime(时间,minTime){
如果(时间<分钟时间){
以毫秒为单位返回一天-分钟+时间;
}
返回时间-分钟时间;
}
函数getTimePartInMilliseconds(t){
返回(t.getHours()*3600+
t、 getMinutes()*60+
t、 getSeconds())*1000+t.getmillides();
}
//年份、月份和日期不相关。
让时间=[
新日期(2020年8月3日23日30日),
新日期(2020、9、1、0、30、0),
新日期(2020年9月2日1月30日0日)
];
日志(计算时间,新日期(2020,8,30,22,0,0));
//输出:1899年12月31日00:30:00
它计算相对于最短时间的平均时间(例如:if
minTime
如果是22:00,则00:30和
minTime
之间的差值为02:30。另一方面,如果
minTime
是01:00,则00:30和
minTime
之间的差值为23:30)。假定数组中的时间大于
minTime

数组中每个项与
minTim之间的持续时间
// function will determine average time given a set of 
// times in a 24 hr. period, i.e. 12am - 12pm
// it does NOT work for a 24 hr. period from 12pm - 12am
var times = ['11:59:00 AM', '12:00:00 AM'];

// function accepts an array of times as the argument
// requires time to be structured as above
function getAverageTime(times) {
    var count = times.length
    var timesInSeconds = [];
    // loop through times
    for (var i =0; i < count; i++) {
        // parse
        var pieces = times[i].split(':');
        var ampm = pieces[2].split(' ');
        var hrs = Number(pieces[0]);
        var mins = Number(pieces[1]);
        var secs = Number(ampm[0]);
        var ampm = ampm[1];
        // convert to 24 hr format (military time)
        if (ampm == 'PM') hrs = hrs + 12;   
        // find value in seconds of time
        var totalSecs = hrs * 60 * 60;
        totalSecs += mins * 60;
        totalSecs += secs;
        // add to array
        timesInSeconds[i] = totalSecs;
    }
    // find average timesInSeconds
    var total = 0;
    console.log(timesInSeconds);
    for (var j =0; j < count; j++) {
        total = total + Number(timesInSeconds[j]);
    }
    var avg = Math.round(total / count);
    console.log('avg secs: '+avg);
    // turn seconds back into a time
    var avgMins = Math.floor(avg/60);
    var avgSecs = avg - (60 * avgMins);
    var avgHrs = Math.floor(avgMins/60);
    console.log('hours: '+avgHrs);
    avgMins = avgMins - (60 * avgHrs);
    // convert back to 12 hr. format
    var avgAmpm = 'AM';
    if (avgHrs > 12) {
        avgAmpm = 'PM';
        avgHrs = avgHrs - 12;
    }
    // add leading zeros for seconds, minutes
    avgSecs = ('0' + avgSecs).slice(-2);
    avgMins = ('0' + avgMins).slice(-2);
    // your answer
    return avgHrs+':'+avgMins+':'+avgSecs+' '+avgAmpm;
}

// execute
alert(getAverageTime(times));
const ONE_DAY_IN_MILLISECONDS = 24 * 3600 * 1000;

function calculateAverageOfHours(times, minTime){
  let timestamps = times.map(getTimePartInMilliseconds);
  let minTimestamp = getTimePartInMilliseconds(minTime);
  
  let average = 0;
  timestamps.forEach(t => {
    average += getMillisecondsFromTimeTillMinTime(t, minTimestamp) / timestamps.length;
  });
  
  const millisecondsFromStartOfDay = (minTimestamp + average) % ONE_DAY_IN_MILLISECONDS;
  
  return new Date(0,0,0,
                 Math.trunc(millisecondsFromStartOfDay / (3600000)),
                 Math.trunc(millisecondsFromStartOfDay % 3600000 / (60000)),
                 Math.trunc(millisecondsFromStartOfDay % 10000 / 1000));
}

function getMillisecondsFromTimeTillMinTime(time, minTime){
  if(time < minTime){
    return ONE_DAY_IN_MILLISECONDS - minTime + time;
  }
  
  return time - minTime;
}

function getTimePartInMilliseconds(t){
  return (t.getHours() * 3600 +
         t.getMinutes() * 60 +
         t.getSeconds()) * 1000 + t.getMilliseconds();
}

// The year, month and date are not relevant.
let times = [
  new Date(2020, 8, 3, 23, 30, 0),
  new Date(2020, 9, 1, 0, 30, 0),
  new Date(2020, 9, 2, 1, 30, 0)
];

console.log(calculateAverageOfHours(times, new Date(2020,8,30,22,0,0))); 
// output: Dec 31 1899 00:30:00