代码之家  ›  专栏  ›  技术社区  ›  Daniel Ellison

momentjs/angularjs-检查两个日期是否在同一时间段-时间表项目

  •  0
  • Daniel Ellison  · 技术社区  · 7 年前

    我正在开发一个简单的时间表应用程序,我正在尝试实现一个自动计算器,它将总结您每天的小时数(星期日、星期一、星期二等)。我注意到的一个问题是,在某些情况下,用户将输入相同日期时间段内的活动。

    例如:

    $scope.Example = [
    {Description:"Example activity",Start:"2018-06-24 8:00",End:"2018-06-24 10:00",Total:2},
    {Description:"Example activity2",Start:"2018-06-24 9:00",End:"2018-06-24 10:00",Total:1},
    {Description:"Example activity3",Start:"2018-06-24 10:00",End:"2018-06-24 11:00",Total:1}];
    
    $scope.Calculate_all_entries = function(){
    
        $scope.Total.Sunday = 0;
    
        if($scope.Example){
    
            angular.forEach($scope.Example, function(element){
    
                if(moment(element.Start).format("dddd") === "Sunday"){
    
                    $scope.Total.Sunday = $scope.Total.Sunday + element.Total;
    
                }
    
            })
    
        }
    
    }
    

    在这种情况下,总数应该是3个小时而不是4个小时,因为我们在同一时间内不收取工作费用。我需要实施一个系统,检查日期是否在同一时期内,并提供适当的总数。

    我在MomentJS的文档中发现了这一点,该文档似乎与我需要的非常接近,但只具有一个值:

    moment('2010-10-19 11:00').isBetween('2010-10-19 10:00', '2010-10-25 00:00'); // true
    

    是否有人知道其他方法来检查开始和结束时间是否与同一天的其他条目在同一时间段内?

    1 回复  |  直到 7 年前
        1
  •  1
  •   BShaps    7 年前

    当然,可以使用momentjs的unix()函数将这些日期时间转换为整数,然后可以轻松地使用该整数检查时间戳是否在其他两个时间戳之间。

    下面是一个例子:

    var timeToCheck = moment('2010-10-19 11:00').unix();
    var startTime = moment('2010-10-19 10:00').unix();
    var endTime = moment('2010-10-25 00:00').unix();
    console.log(timeToCheck >= startTime && timeToCheck <= endTime); // true