javascript - 使用 moment.js、JS 或 Jquery,在时间范围内启用功能

标签 javascript jquery time momentjs

我正在尝试编写能够在特定时间之间可靠地显示 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 来解决它。

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

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;
            }
        }
    }

});

关于javascript - 使用 moment.js、JS 或 Jquery,在时间范围内启用功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33462561/

相关文章:

javascript - 如何做 3 个 jQuery 回调

javascript - Instafeed.js 上一个按钮

javascript - 无 Action 的工作形式

c++ - C++ 中 gettimeofday() 的最佳替代库是什么?

javascript - react : Why isn't my context value updated?

javascript - 如何设置用于创建表格的 HTML、Javascript 和 CSS 文件的位置?

javascript - 下拉列表值取决于另一个下拉列表中的选定值

javascript - 如何阻止 DustJS 将实体转换回普通字符?

python - 属性错误 : 'Timestamp' object has no attribute 'timestamp

如果超过 24 小时,Mysql "Time"类型在 Rails 中给出 "ArgumentError: argument out of range"