我试图弄清楚如何做一个简单的IF语句,以弄清提供的日期是否在08:00到20:15之间,而不管日期是什么
var obj = { "Date/Time": "2018-09-30 23:51:09" };
const date = moment(obj['Date/Time']).format("HH:mm:ss");
const start_time = "08:00:00";
const end_time = "20:15:00";
if (moment(date).isBetween(start_time, end_time)) {
console.log("yes")
}
我上面的代码虽然失败,但出现以下错误:
Error at Function.createFromInputFallback (https://cdn.jsdelivr.net/momentjs/2.14.1/moment-with-locales.min.js:17:482)
有什么建议吗?
答案 0 :(得分:1)
假设所有三个字符串均为HH:mm:ss
格式,则可以将它们作为字符串进行比较:
var date = "23:51:09";
var start_time = "08:00:00";
var end_time = "20:15:00";
if (start_time <= date && date <= end_time) {
console.log("yes");
}
如果在开始时间和结束时间之间可能存在午夜,则:
var date = "23:51:09";
var start_time = "20:00:00";
var end_time = "04:00:00";
if (
(start_time <= end_time && (start_time <= date && date <= end_time)) ||
(start_time > end_time && (start_time <= date || date <= end_time))
) {
console.log("yes");
}
答案 1 :(得分:0)
首先,由于日期字符串不是ISO格式,因此需要在moment(string, string)
表达式中使用if
构造函数正确构造矩对象。
第二,您还可以将start_time
和end_time
构造为矩对象,以便可以直接比较这三个对象的时间值。参见下面的演示:
var obj = {
'Date/Time': '2018-09-30 09:51:09'
}
const date = moment(obj['Date/Time']).format("HH:mm:ss");
const start_time = moment("08:00:00", 'HH:mm:ss');
const end_time = moment("20:15:00", 'HH:mm:ss');
if (moment(date, 'HH:mm:ss').isBetween(start_time, end_time)) {
console.log("yes")
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
答案 2 :(得分:0)
您似乎需要花一点时间来开始和结束时间。
const start_time = moment(obj['Date/Time']).hour(8).startOf('hour');
const end_time = moment(obj['Date/Time']).hour(20) minute(15).startOf('minute');
if (moment(date).isBetween(start_time, end_time)) {
console.log('WIN!');
}
如果仍然出现错误,则可能是日期的格式不是它寻找的时间,您需要使用moment(DATE, FORMAT)
答案 3 :(得分:0)
为什么不尝试这样的事情?
const date = new Date('2018-09-30 23:51:09');
const start_time = new Date('2018-09-30 8:00:00');
const end_time = new Date('2018-09-30 20:15:00');
if (start_time<date && date<end_time) {
console.log('yes');
}