检查当前时间(UTC)是否在

时间:2016-11-10 05:06:01

标签: javascript jquery datetime momentjs

我现在可以在同一天内成功检查,但如果时间跨度超过2天就会失败。

我也需要让它工作多天。

有什么想法吗?

** 更新 **

将要使用的环境不断变化,所以我不想为此设定固定日期。

这就是我现在所拥有的:



var startTime,
  endTime,
  currentTime = moment.utc(),
  result,
  time,
  str = '';

function test() {

  str += 'Current UTC Time <br>';
  str += currentTime.format() + '<br>';
  str += '------------------------------ <br>';

  startTime = moment.utc('01:00', 'HH:mm');
  endTime = moment.utc('10:00', 'HH:mm');

  result = currentTime.isBetween(startTime, endTime);
  str += 'Test one: ' + result + '<br>';
  str += 'start 01:00 - end 10:00 <br>';
  str += 'result is True which is correct <br>';
  str += '------------------------------ <br>';

  startTime = moment.utc('23:00', 'HH:mm');
  endTime = moment.utc('07:00', 'HH:mm');

  result = currentTime.isBetween(startTime, endTime);
  str += 'Test two: ' + result + '<br>';
  str += 'start 23:00 - end 07:00 <br>';
  str += 'This spans across two days and the result is false which is incorrect <br>';

  $('div').html(str);

}

test();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script>

<div>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

看起来有几种方法可以用UTC获取和设置日期。据我所知,格式函数将解析输入并将其读取的内容转换为所需的格式,只要两者都有效。这应该允许您在一天的日期,时间和一半之间进行测试。不仅如此,输入看起来也很灵活,并且会采用各种输入类型和格式。希望这有帮助!

编辑:我是Stack Overflow答案的新手,因此我的片段长而愚蠢,抱歉

var startTime,
  endTime,
  currentTime = moment.utc(),
  result,
  time,
  str = '';

function test() {
  startTime = moment.utc("2016-11-09 22:00");
  endTime = moment.utc("2016-11-10 10:30");

  str += "startTime " + startTime.format("MM DD hh:mm a");
  str += "<br>";
  str += "endTime " + endTime.format("MM DD hh:mm a");
  str += "<br>";

  result = currentTime.isBetween(startTime, endTime);
  str += 'Test two: ' + result + '<br>';
  startTime = startTime.format("MM DD hh:mm a");
  endTime = endTime.format("MM DD hh:mm a");
  currentTime = currentTime.format("MM DD hh:mm a");

  str += "current time normal : " + currentTime;
  str += "<br>";
  str += "start time normal : " + startTime;
  str += "<br>";
  str += "end time normal : " + endTime;
  str += "<br>";

  $('div').html(str);
}

test();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script>

<div>
</div>

答案 1 :(得分:1)

如果您正在查看可能超过几天的时段startTime = moment.utc('23:00', 'HH:mm');没有包含足够的信息用于此目的。没有什么可以说明是晚上23点是今晚,等等。

此外,只有假设'01:00'表示今天凌晨1点而不是昨天凌晨1点,您的第一次测试才通过。如果是昨天凌晨1点,当前时间是0:15,那么当它应该是真的时会报告错误。

如果您实施规则以确定时间是今天还是其他某天,那么您可以执行以下操作来进行比较:

  var startPreviousDay = true;
  var endNextDay = true;

  startTime = moment.utc('23:00', 'HH:mm');
  if (startPreviousDay) startTime = startTime.subtract(1, 'day');

  endTime = moment.utc('07:00', 'HH:mm');
  if (endNextDay) endTime = endTime.add(1, 'day');

设定这些规则的规则完全取决于您可获得的有关用户意图的信息。

var startTime,
  endTime,
  currentTime = moment.utc(),
  result,
  time,
  str = '';

function test() {

  str += 'Current UTC Time <br>';
  str += currentTime.format() + '<br>';
  str += '------------------------------ <br>';

  startTime = moment.utc('01:00', 'HH:mm');
  endTime = moment.utc('10:00', 'HH:mm');

  result = currentTime.isBetween(startTime, endTime);
  str += 'Test one: ' + result + '<br>';
  str += 'start 01:00 - end 10:00 <br>';
  str += 'result is True which is correct <br>';
  str += '------------------------------ <br>';

  var startPreviousDay = true;
  var endNextDay = true;
  
  startTime = moment.utc('23:00', 'HH:mm');
  if (startPreviousDay) startTime = startTime.subtract(1, 'day');
  
  endTime = moment.utc('07:00', 'HH:mm');
  if (endNextDay) endTime = endTime.add(1, 'day');

  result = currentTime.isBetween(startTime, endTime);
  str += 'Test two: ' + result + '<br>';
  str += 'start 23:00 - end 07:00 <br>';
  str += 'startPreviousDay = true and endNextDay = true spans across three days so the result will true<br>';

  $('div').html(str);

}

test();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script>

<div>
</div>