使用 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;
}
}
}
});
我正在尝试编写能够在特定时间之间可靠地显示 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;
}
}
}
});