使用 moment.js、JS 或 Jquery,在一个时间范围内开启一个功能

Using moment.js, JS, or Jquery, turn on a feature within a time frame

我正在尝试编写能够在特定时间之间可靠地显示 div 的代码。

我正在使用 moment.js,他们在文档中声称他们可以帮助做到这一点,但我找不到查询所需时间的正确方法。

我的代码可以让您了解我想要什么,但实际上并没有用,因为当我尝试打开或关闭该功能时,如果时间在午夜之前,我最终会得到负数而不是时间. (我使用的是 UTC 时间并减去 10 小时。我可以在我的数组中使用负数,但为了清楚起见,我想尽可能坚持使用实际时间。)

此外,我的代码现在是这样的,我可以一次关闭该功能,但一段时间后关闭它会更好,在两次之间打开它是最好的。

你们知道如何使用时间而不是日期正确查询 moment( ).isAfter 或 .isBetween 吗?

到目前为止,我已经尝试了很多排列组合:

moment().isBetween('7:00:00', '8:00:00', 'hour', 'minute'); and .isAfter.

文档中似乎没有这方面的示例,过去网络上也没有人提出过这个问题。谢谢!

var openSun = [6,7,17,22]; // on hours

// Sundays ---------------------------------------------- //
// setup sunday - on
if (moment().days() === 7) {
    for (var i = 0; i < openSun.length; i++) {
        if (openSun[i] === moment().utc().hours()-10) {
            $('#cast').hide();
            $('#cast-on').show();
        } 
    }
}

// switch back to off
var offhoursSun = [8,17,22];
var offminutesSun = [00,30,30];

for (var j = 0; j < offhoursSun.length; j++) {

    if ((moment.utc().hours()-10 === offhoursSun[j]) && (moment.utc().minutes() === offminutesSun[j])) {
      $('#cast').show();
      $('#cast-on').hide();
    }
}

您是否尝试将新日期 JavaScript 传递给 momentjs 之间和之后?我看到您在日期值

中使用字符串

对于这样的任务,您可以使用原版 javascript 来解决它。

首先,我建议使用更好、更通用的数据结构来存储您的时隙。我更喜欢这样:

var openSun = [
    {
        start: {
            hour: 7,
            minute: 0,
        },
        end: {
            hour: 8,
            minute: 0,
        },
    },
    {
        start: {
            hour: 17,
            minute: 0,
        },
        end: {
            hour: 17,
            minute: 30,
        },
    },
    {
        start: {
            hour: 22,
            minute: 0,
        },
        end: {
            hour: 22,
            minute: 30,
        },
    }
];

然后你可以 运行 通过定义的时间段并检查你是否真的在一个边界之间:

$(function(){
    var start, end, now;
    var d = new Date();

    now = d.getHours()*60+d.getMinutes();
    $('#cast').show();
    $('#cast-on').hide();



    if (d.getDay() === 0) {
        for (var slot = 0, len = openSun.length; slot < len; slot++) {
            start = openSun[slot].start.hour*60+openSun[slot].start.minute;
            end = openSun[slot].end.hour*60+openSun[slot].end.minute;
            if (now>start && now<end){
                $('#cast').hide();
                $('#cast-on').show();
                break;
            }
        }
    }

});

随时查看 http://jsfiddle.net/yLy8ocd5/

中的代码

我用了你的数据。要使示例正常工作,只需对其进行更改,以便适合某个时间段。

编辑: 这是 moment.js 的工作方式:

$(function(){
    var start, end;

    $('#cast').show();
    $('#cast-on').hide();   


    if (moment().weekday() === 0) {
        for (var slot = 0, len = openSun.length; slot < len; slot++) {
            start = moment({
                hour: openSun[slot].start.hour, 
                minute: openSun[slot].start.minute
            });

            end = moment({
                hour: openSun[slot].end.hour, 
                minute: openSun[slot].end.minute
            });

            if (moment().isBetween(start, end)){
                $('#cast').hide();
                $('#cast-on').show();
                break;
            }
        }
    }

});