我需要检查我的当前时间是否位于Switch-1、Switch-2或Switch-3之间。我尝试了循环和匹配的条件,但不知何故它不起作用,我不确定这是否是由于字符串比较。
示例:
- 如果当前时间为2020年9月23日7:45,则要打印2020年9日23日切换-1
- 如果当前时间为2020年9月23日18:40,则要打印2020年9月23-23日切换-2
- 如果我的当前时间是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;
}
}
}