我现在可以在同一天内成功检查,但如果时间跨度超过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;
答案 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>