时刻是2次之间的时间,与日期无关

时间:2018-10-03 13:45:16

标签: javascript date momentjs

我试图弄清楚如何做一个简单的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)

有什么建议吗?

4 个答案:

答案 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_timeend_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');
    }