如何检查当前时间是否介于存储在Array中的时间之间



我需要检查我的当前时间是否位于Switch-1、Switch-2或Switch-3之间。我尝试了循环和匹配的条件,但不知何故它不起作用,我不确定这是否是由于字符串比较。

示例:

  1. 如果当前时间为2020年9月23日7:45,则要打印2020年9日23日切换-1
  2. 如果当前时间为2020年9月23日18:40,则要打印2020年9月23-23日切换-2
  3. 如果我的当前时间是2020年9月24日03:00,则要打印2020年9月23日切换-3(当前日期减去1天(

即00:00至05:00之间的特殊情况,因为日期更改为9月24日,我希望当前日期减去1天,即9月23日

var Data;
var m = moment().format('HH:mm')
console.log(m)
var Time = [
{
"switchName": 'switch 3',
"start": '22:00',
"end": '05:00'
},
{
"switchName": 'switch 1',
"start": '05:00',
"end": '15:00',
},
{
"switchName": 'switch 2',
"start": '15:00',
"end": '22:00',
},

]
for (let i = 0; i < Time.length; i++) {
const start = Time[i].start;
const end = Time[i].end;
if (start > end) {
if (m <= start || m >= end) {                           
data = {
currentdate: moment().format('YYYY-MM-DD'),
currentswitch: Time[i].switchName
}
console.log(data);
break;
}
}
else {
if (m >= start && m <= end) {
data = { currentdate: moment().format('YYYY-MM-DD'), currentswitch: Time[i].switchName }

console.log(data);
break;
}
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

如果start > end(即"开关3"的情况(,则您的测试不正确:(m <= start || m >= end)。它应该是:if (m >= start || m <= end)(意思是22-23或0-5(。

你还写道:;如果我的当前时间是03:00,那么想要打印23-09-2020 Switch-3(当前日期减去1("。这里有两个问题:

  • 您说要DD-MM-YYYY格式的日期,但您使用的是format('YYYY-MM-DD')。你必须决定你想要什么,并相应地更改格式。

  • 你说你想要";当前日期减去1";但尚不清楚";减去1";方法减一秒?分钟小时白天月年假设你的意思是";减去1天";,您可以使用moment().subtract(1, "days")在格式化前减去1天,因此您的最终代码将是:

for (let i = 0; i < Time.length; i++) {
const start = Time[i].start;
const end = Time[i].end;
if (start > end) {
if (m <= start || m >= end) {                           
data = {
// Subtract 1 day:
currentdate: moment().subtract(1, "days").format("YYYY-MM-DD"),
currentswitch: Time[i].switchName
}
console.log(data);
break;
}
}
else {
if (m >= start && m <= end) {
data = { currentdate: moment().format('YYYY-MM-DD'), currentswitch: Time[i].switchName }
console.log(data);
break;
}
}
}

最新更新