【问题标题】:Angular date time calculations gives wrong result角度日期时间计算给出错误的结果
【发布时间】:2015-04-05 05:23:48
【问题描述】:

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

$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 我该如何纠正这个?

【问题讨论】:

    标签: javascript angularjs date time datepicker


    【解决方案1】:

    我相信这是因为您没有考虑到对您的 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 并记录一些您的值会向您展示这一点。

    【讨论】:

      【解决方案2】:

      你可以试试下面的:

      var diff = timestamp2 - (timestamp1 + timestamp3);

      【讨论】:

      • 给出相同的结果,没有不同:/
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多