提供“社交网络”岗位的失效时间

时间:2015-05-03 21:59:18

标签: javascript time

jsFiddle

我创建了一个小的javascript片段,它可以使用两个输入并使用它们进行一些“发布”。在这些帖子中,它表示如下:

嗨!

由Random Person发布_分钟前。

但没有下划线,应该说现在和发布时间之间的失效时间。我很难想到如何做到这一点,但这正是我目前正在使用的:

$('#b').click(function () {
    var v = $('#type').val();
    var u = $('#input').val();
    if (v !== "" && u !== "") {
        var time = new Date();
        var currentime = Date.now();
        var x = currentime - time;
        $("ul").prepend("<li>" + v + "<br />Posted by " + u + " " + x + " minutes ago  </li>");
        $('#type, #input').css('border', '');
    } else if (v == "" && u == "") {
        $('#type, #input').css('border', '1px solid red');
    } else if (v == "") {
        $('#type').css('border', '1px solid red');
        $('#input').css('border', '');
    } else {
        $('#input').css('border', '1px solid red');
        $('#type').css('border', '');
    }
});
#type, #input {
    border-radius: 10px;
    background: #dadae3;
    color: #59ACFF;
    border: 1px solid #dadae3;
}
#type {
    border-bottom-right-radius: 0;
}
#type:hover, #input:hover {
    background: #c4c4cc;
    color: #488CCF;
    border: 1px solid #c4c4cc;
}
#type:hover::-webkit-input-placeholder {
    color: #59ACFF
}
#input:hover::-webkit-input-placeholder {
    color: #59ACFF
}
#type:focus, #input:focus {
    border: 1px solid #59ACFF;
    outline: 0;
}
button {
    height: 30px;
    background: #dadae3;
    border-radius: 10px;
    border: 1px solid #dadae3;
    color: #59ACFF;
    cursor: pointer;
}
button:hover {
    background: #c4c4cc;
    color: #488CCF;
    border: 1px solid #c4c4cc;
}
button:focus {
    outline: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet"/>
<br />
<textarea id='type'></textarea>
<br />
<br />
<input id='input'>
<br />
<br />
<button id='b'><span class='fa fa-plus-square-o fa-2x'></span>

</button>
<ul id='ul'></ul>

我意识到这是错误的,但我想不出其他方法可以做到这一点。我希望每分钟都能更新失效时间。

谢谢。 :)

2 个答案:

答案 0 :(得分:3)

这是我的实施。每隔10秒调用updatePost函数来更新帖子中的时间。对代码进行了轻微调整(消除了重复的$('#type, #input').css('border', '');等)。

请记住打开Web控制台以查看调试输出。

也可以在JSFiddle上找到。

更新:

  1. 根据Martin的建议分开setInterval功能。
  2. 新示例现在利用data属性。
  3. &#13;
    &#13;
    // Update the posts every 10 seconds
    setInterval(function () {
        console.log('Updating posts...');
        $('ul .time').each(function (id, span) {
            time = Math.round((new Date() - $(span).data('timestamp')) / 60000);
            $(span).text(time);
        });
    }, 10000);
    
    $('#b').click(function () {
        var v = $('#type').val();
        var u = $('#input').val();
        $('#type, #input').css('border', '');
    
        if (v !== "" && u !== "") {
            // Generate a timestamp for every post
            var timestamp = Date.now();
    
            $("ul").prepend('<li>' +
                '<span class="body">' + v + '</span><br />' +
                'Posted by ' +
                '<span class="author">' + u + '</span> ' +
                '<span class="time" data-timestamp="' + timestamp + '">0</span>' +
                ' minutes ago  </li>');
    
        } else {
            if (v == "") {
                $('#type').css('border', '1px solid red');
            }
            if (u == "") {
                $('#input').css('border', '1px solid red');
            }
        }
    });
    &#13;
    #type,
    #input {
      border-radius: 10px;
      background: #dadae3;
      color: #59ACFF;
      border: 1px solid #dadae3;
    }
    #type {
      border-bottom-right-radius: 0;
    }
    #type:hover,
    #input:hover {
      background: #c4c4cc;
      color: #488CCF;
      border: 1px solid #c4c4cc;
    }
    #type:hover::-webkit-input-placeholder {
      color: #59ACFF
    }
    #input:hover::-webkit-input-placeholder {
      color: #59ACFF
    }
    #type:focus,
    #input:focus {
      border: 1px solid #59ACFF;
      outline: 0;
    }
    button {
      height: 30px;
      background: #dadae3;
      border-radius: 10px;
      border: 1px solid #dadae3;
      color: #59ACFF;
      cursor: pointer;
    }
    button:hover {
      background: #c4c4cc;
      color: #488CCF;
      border: 1px solid #c4c4cc;
    }
    button:focus {
      outline: 0;
    }
    &#13;
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" />
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <br />
    <textarea id='type'></textarea>
    <br />
    <br />
    <input id='input'>
    <br />
    <br />
    <button id='b'><span class='fa fa-plus-square-o fa-2x'></span>
    
    </button>
    <ul id='ul'></ul>
    &#13;
    &#13;
    &#13;

    PS:增强功能,例如区分分钟&#39;分钟&#39;和&#39; Minute&#39;也应该实施。

答案 1 :(得分:0)

对代码的这种微小修改怎么办?

诀窍是随着时间在一个范围内存储自定义参数,然后定期更新。

var memberSchema = mongoose.Schema({

    'project'       : { 
        'type'      : Schema.Types.ObjectId, 
        'ref'       : 'Project' 
    },
    'first'         : String,
    'last'          : String,
    'email'         : String,
    'tracker'       : {
        'etag'      : String,
        'id'        : String,
        'photoLink' : String,
        'role'      : String,
        'type'      : {'type': String},   // Here...
    },
    'survey'        : {
        'etag'      : String,
        'id'        : String,
        'photoLink' : String,
        'role'      : String,
        'type'      : {'type': String},   // ...and here
    },
});
$('#b').click(function () {
    var v = $('#type').val();
    var u = $('#input').val();
    if (v !== "" && u !== "") {
        $("ul").prepend("<li>" + v + "<br />Posted by " + u + " <span posted=\""+ currentime + "\">0</span> minutes ago  </li>");
        $('#type, #input').css('border', '');
    } else if (v == "" && u == "") {
        $('#type, #input').css('border', '1px solid red');
    } else if (v == "") {
        $('#type').css('border', '1px solid red');
        $('#input').css('border', '');
    } else {
        $('#input').css('border', '1px solid red');
        $('#type').css('border', '');
    }
});

setInterval(function() {
    $('ul span').each(function(id, span) {
        time = Math.round((new Date() - $(span).attr('posted')) / 60000);
        $(span).text(time);
    });
}, 5000);
#type, #input {
    border-radius: 10px;
    background: #dadae3;
    color: #59ACFF;
    border: 1px solid #dadae3;
}
#type {
    border-bottom-right-radius: 0;
}
#type:hover, #input:hover {
    background: #c4c4cc;
    color: #488CCF;
    border: 1px solid #c4c4cc;
}
#type:hover::-webkit-input-placeholder {
    color: #59ACFF
}
#input:hover::-webkit-input-placeholder {
    color: #59ACFF
}
#type:focus, #input:focus {
    border: 1px solid #59ACFF;
    outline: 0;
}
button {
    height: 30px;
    background: #dadae3;
    border-radius: 10px;
    border: 1px solid #dadae3;
    color: #59ACFF;
    cursor: pointer;
}
button:hover {
    background: #c4c4cc;
    color: #488CCF;
    border: 1px solid #c4c4cc;
}
button:focus {
    outline: 0;
}