Angular 日期时间计算给出了错误的结果

Angular date time calculations gives wrong result

嗨,我正在计算日期之间的时间 我的代码

$scope.startTime = new Date('0').setHours(7);
$scope.endTime = new Date('0').setHours(17);
$scope.breakTime = new Date('0').setMinutes(30);     

this.tosum = function(startTime, endTime, breakTime) {
            var timestamp1 = new Date(startTime).getTime();
            var timestamp2 = new Date(endTime).getTime();
            var timestamp3 = new Date(breakTime).getTime();
            var diff = timestamp2 - timestamp1 - timestamp3;
            var newDate = new Date('0');
            newDate.setMilliseconds(diff);
            return newDate;
        };

它适用于时间戳 1 和 2,但是当我添加时间戳 3 时,我得到了错误的结果。:/

我想获取 startTime 和 endTime 之间的时间 - breakTime

var diff = timestamp2 - timestamp1

应该给出 10:00,但是当添加 -timestamp1 时,它给出 10:30 而不是应该的 9:30 :/

如果我添加 + timestamp3; 而不是 - 我应该得到 9:30,但是如果增加一小时休息时间,那么休息时间是 1 小时 30 分钟,我得到 10:30 和休息时间 2 小时 30 分钟结果 11:30 等一个 :/ 但应该是 8:30 和 7:30 我该如何更正这个?

你能试试下面吗:

var diff = timestamp2 - (timestamp1 + timestamp3);

我认为这是因为您没有考虑到对 Epoch 的引用(2000 年:您使用使用解析器解析的字符串 0)。在纯 JS 中(你可以将其翻译成 angular)。

function tosum(startTime, endTime, breakTime) {
    var reference = new Date('0'),
        timestamp1 = new Date(startTime).getTime() - reference.getTime(),
        timestamp2 = new Date(endTime).getTime() - reference.getTime(),
        timestamp3 = new Date(breakTime).getTime() - reference.getTime(),
        diff = timestamp2 - timestamp1 - timestamp3,
        newDate = new Date('0');

    newDate.setTime(diff);
    
    return newDate;
}

var startTime = new Date('0').setHours(7),
    endTime = new Date('0').setHours(17),
    breakTime = new Date('0').setMinutes(30);

document.body.textContent = tosum(startTime, endTime, breakTime).toISOString().split(/[T\.]/g)[1];

如果您使用了 unix 纪元(通过使用自纪元以来的毫秒数 0),那么您就没有问题。

function tosum(startTime, endTime, breakTime) {
    var timestamp1 = new Date(startTime).getTime(),
        timestamp2 = new Date(endTime).getTime(),
        timestamp3 = new Date(breakTime).getTime(),
        diff = timestamp2 - timestamp1 - timestamp3,
        newDate = new Date(0);

    newDate.setTime(diff);
    
    return newDate;
}

var startTime = new Date(0).setHours(7),
    endTime = new Date(0).setHours(17),
    breakTime = new Date(0).setMinutes(30);

document.body.textContent = tosum(startTime, endTime, breakTime).toISOString().split(/[T\.]/g)[1];

使用 console 并记录一些您的值会向您展示这一点。