javascript - 计算给定多个开始和结束日期的唯一时间

标签 javascript php datetime math formula

如果您有一系列带有开始日期和结束日期的约会,如何计算所有约会的唯一时间?

示例:

var appointments = {
    0:{"start":"2015-01-20 09:00:00","end":"2015-01-20 09:30:00"},
    1:{"start":"2015-01-20 09:15:00","end":"2015-01-20 09:42:22"},
    2:{"start":"2015-01-20 10:00:00","end":"2015-01-20 10:25:00"},
    3:{"start":"2015-01-20 10:10:00","end":"2015-01-20 10:53:00"}
}

因此,在这个示例中,我希望获得 1H 35M 22S 的唯一时间(事件)值。 有人知道这个的公式吗?

到目前为止,我已经做到了这一点,似乎有效,但我认为日期必须按开始时间排序。这是最有效的计算方法吗?:

var totalElapsedAppointmentSeconds = 0;
var lastActiveTimestamp;

for (i in appointments) {
    if (totalElapsedAppointmentSeconds == 0) {
        totalElapsedAppointmentSeconds = new Date(appointments[i].end) - new Date(appointments[i].start);
        lastActiveTimestamp = new Date(appointments[i].end);
    } else {
        if (new Date(appointments[i].start) < lastActiveTimestamp) {
            if (new Date(appointments[i].end) > lastActiveTimestamp) {
                totalElapsedAppointmentSeconds += new Date(appointments[i].end) - lastActiveTimestamp;
                lastActiveTimestamp = new Date(appointments[i].end);
            } else {
                //nothing, already completely accounted for
            }
        } else {
            totalElapsedAppointmentSeconds += new Date(appointments[i].end) - new Date(appointments[i].start);
            lastActiveTimestamp = new Date(appointments[i].end);
        }
    }
}

totalElapsedAppointmentSeconds = totalElapsedAppointmentSeconds/1000;
var totalElapsedTime = Math.floor(totalElapsedAppointmentSeconds / 3600) + "H " + Math.floor((totalElapsedAppointmentSeconds % 3600)/60) + "M " + (totalElapsedAppointmentSeconds % 3600) % 60 + "S";
console.log("totalElapsedTime",totalElapsedTime);

最佳答案

不清楚你在问什么,但这演示了计算时间差

编辑哎呀javascript说这些是无效日期,它们来自哪里?

moment.js如果您必须使用这些作为输入,那么这是解析它们的一个不错的选择

var data = {
  "appointments": {
    0:{"start":"2015-01-20 09:00:00","end":"2015-01-20 09:30:00"},
    1:{"start":"20-01-2015 09:15:00","end":"20-01-2015 09:42:22"},
    2:{"start":"20-01-2015 10:00:00","end":"20-01-2015 10:25:00"},
    3:{"start":"20-01-2015 10:10:00","end":"20-01-2015 10:53:00"},
  }
}

function secondsDifference(ts1, ts2){
  startMs = new Date(ts1).valueOf();
  endMs = new Date(ts2).valueOf();
  deltaMs = endMs - startMs;
  deltaS = deltaMs /1000;
  deltaS = Math.floor(deltaS);
  return deltaS;
}

var a = data.appointments[0];
var result = secondsDifference(a.start, a.end);
console.log('first appointment length seconds:', result)

关于javascript - 计算给定多个开始和结束日期的唯一时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870344/

相关文章:

php - 获取中午 PHP 的时间戳

Java——当用户输入日期字符串时显示一年中的某一天

javascript - 从特定内容 div 中的第一张图像获取图像源

javascript - 对单个文件的多个 HTTP 请求

javascript - 从 for 循环访问变量的特定实例(范围问题?)

python - 你如何获得 Python 中两个时间对象之间的差异

android - ThreeTenABP 日期时间解析器给出 yyyy-MM-ddTHH :mm:ss formate 的异常

来自数据库的javascript倒数计时器新日期

PHP Curl 获取下载文件大小

php - 如何在 mysqli 中运行选择查询