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

时间:2015-02-05 11:17:26

标签: javascript angularjs date time datepicker

我正在努力计算日期之间的时间  我的代码

$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;
        };

它适用于timestamp1和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我怎么纠正这个?

2 个答案:

答案 0 :(得分:1)

我相信这是因为你没有考虑你的Epoch(2000年:你使用解析器解析的字符串0)的引用。在纯JS中(你可以将它翻译成角度)。



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并记录您的一些值会向您展示。

答案 1 :(得分:-1)

请你试试下面的内容:

var diff = timestamp2 - (timestamp1 + timestamp3);