【问题标题】:current time plus one hour condition当前时间加上一小时条件
【发布时间】:2017-01-16 09:33:42
【问题描述】:

我遇到了一种情况,我必须根据时间更改路径。

我将有两个日期变量,CheckInStartDateCheckInEndDate,它们将来自 API。 当前时间为系统日期时间。

路径必须在两种情况下改变。

  1. CheckInStartDate 当前时间减去 1 小时
  2. CheckInEndDate 加上当前时间的 1 小时。

这是我目前拥有的代码。

$scope.checkIn = function() {
    var ONE_HOUR = 60 * 60 * 1000; /* ms */
    $scope.checkInStartDate=  01/16/2017 09:06:00 AM;
    $scope.checkInEndDate=  01/16/2017 11:06:00 AM;
    var checkInStartDate=$scope.checkInStartDate;
    var checkInEndDate=$scope.checkInEndDate;
    var currentDate = new Date();
    var checkinStartDate=new Date(checkInStartDate);
    var checkinEndDate = new Date(checkInEndDate);

    if ((checkinStartDate.getTime()) > (currentDate.getTime() - ONE_HOUR) ||
            (checkinEndDate.getTime()) < (currentDate.getTime() + ONE_HOUR)) {
        $location.path('/checkIn')
    }
    else{
        alert("cannot checkin");
    }
}

【问题讨论】:

  • 您的问题到底是什么?您的代码在我看来大部分都很好,除了最初设置 $scope.checkInStartDate 的方式是语法错误(结束日期也是如此)。
  • 您忘记了第 3 行和第 4 行中日期时间的引号。
  • 不能用momentjs.com吗?它会使修改日期更容易吗?
  • 您确定逻辑“OR”是正确的并且不应该是“AND”吗?
  • 除非您告诉我们您要达到的目标,否则我们无法检查任何内容。请定义预期的行为。

标签: javascript angularjs


【解决方案1】:

如果我没有正确回答您的问题,您希望允许在以下两次之间的时间段内签到:

  • CheckInStartDate 减去 1 小时
  • CheckInEndDate 加 1 小时

让我们称第一个点为s,第二个点为e。当前时间是c。在这种情况下,当

s < c < e

在 JavaScript 中这是等价的:

var s = new Date($scope.checkInStartDate).getTime() - ONE_HOUR;
var e = new Date($scope.checkInEndDate).getTime() + ONE_HOUR;
var c = new Date().getTime();
if (s < c && c < e) {
    // check-in allowed
} else {
    // not allowed
}

【讨论】:

  • 感谢您的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 2013-05-07
  • 2020-10-11
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2017-03-28
相关资源
最近更新 更多