从最后一分钟到下一个小时的第一分钟

时间:2015-05-09 17:58:55

标签: javascript jquery

我构建了一个存储消息的页面和一个用于将消息发送到db中的用户。表单有一个限制:从将消息发布到数据库后的30秒内,您不能使用相同的用户。

function undisable (id,time){
        setTimeout(function() {
            $('#'+id).prop('disabled', false);
        }, (30000-time));
}

$('#destinatario option').each(function(){
    var ds = $(this).attr('data-ts');
    var dateArray = ds.split(" ");  // split the date and time 
    var ds1 = dateArray[0].split("-"); // split each parts in date
    var ds2 = dateArray[1].split(":"); // split each parts in time
    var newDate = new Date(ds1[0], (+ds1[1] - 1), ds1[2], ds2[0], ds2[1], ds2[2]).getTime(); //parse it
    var currentDate = new Date().getTime();
    var diff = currentDate - newDate;
    if(diff < 30000){
        $(this).prop('disabled', true);
        var id = $(this).attr('id');
        undisable(id,diff);
    }
});

现在我想添加一个新条件:您无法从最后一分钟到下一分钟的第一分钟发布给任何用户。因此,例如,您不能从10:59:00发布到11:01:00(以及当天的每个小时等等)。 设置if子句的最聪明方法是什么? 我想要建立的是:

if(now(minutes) is between 59 and 01){ //this is the point where I get stuck at
    $('#sendbutton').prop('disabled', true); //I cannot post
}else{
    $('#sendbutton').prop('disabled', false); //I can post
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你是对的,这使事情变得复杂。这是解决问题的代码。依靠setTimeouts来禁用和启用按钮,您可以轻松编辑要禁用按钮的时间。

function time_disabler()
{
    var time_disable = 59; // time in minutes to disable the button
    var time_enable = 1; // time in minutes to enable to button
    var current_mins = new Date().getMinutes(); // current time (minutes)
    var current_secs = new Date().getSeconds(); // current time (seconds)
    var total_seconds = current_mins * 60 + current_secs; // current time overall in seconds
    var last_min_secs = time_disable*60; // time in seconds to disable the button
    var first_min_secs = time_enable * 60; // time in seconds to enable the button

    
    // if in between the two times, disable button
    if((total_seconds >= last_min_secs && total_seconds < first_min_secs) || (total_seconds < first_min_secs && first_min_secs < last_min_secs))
    {
        $('#sendbutton').prop('disabled', true); //I cannot post
        var time = (total_seconds >= first_min_secs)? first_min_secs + (60*60) - total_seconds : first_min_secs - total_seconds ;

        // set time out to recall this function, which will enable it
        var t = setTimeout(function (){
            time_disabler();
        }, time * 1000 );
        
    } else { // if not between the times, disable it
        
        $('#sendbutton').prop('disabled', false); //I can post
        
        // set time out to recall this function, which will disable it
        var t = setTimeout(function(){time_disabler();}, ((last_min_secs> total_seconds ? last_min_secs : last_min_secs + 60*60) - total_seconds) * 1000 );
    }
}
time_disabler();

- 旧答案 -

您只需使用JavaScript的getMinutes()和getSeconds():

var current_mins = new Date().getMinutes();
var current_secs = new Date().getSeconds();
current_mins += current_secs/60;

if(current_mins >= 59 || current_mins <= 1)
{
    $('#sendbutton').prop('disabled', true); //I cannot post
} else {
    $('#sendbutton').prop('disabled', false); //I can post
}