在 ejs/express 中调用 setInterval() 查询数据库
Call setInterval() in ejs/express with querying db
我看过 但这不能解决我的任务。
手头的问题是:
我在我的 MySQL 数据库中的 event.date
列中有一个日期,它是这样检索的:
app.get('/', (req, res) => {
var query1='SELECT event_date,... FROM event..';
connection.query(query1, function(err,results){
if (results) res.render('index', {data: results});
});
});
我想要的是在我的页面上启动一个计时器,它将记录 new Date();
和我存储的日期(例如 this)
index.ejs
<% data.some(function(d,index){ %>
<%= d.event_date %> //this prints the data here obviously
<% **How to implement the setInterval() here??** %>
<% })%>
我尝试了两种或更多的菜鸟方法,但都是徒劳的。我缺少什么概念?如何实现?
谢谢。
尝试做这样的事情(倒计时功能取自 this answer)
EJS模板代码:
<% data1.forEach(function(d, index){ %>
<div id="countdown<%= index %>"></div>
<% }) %>
<script>
<% data1.forEach(function(d, index){ %>
CountDownTimer("<%= d.event_date %>", "countdown<%= index %>");
<% })%>
function CountDownTimer(dt, id) {
var end = new Date(dt);
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var timer;
function showRemaining() {
var now = new Date();
var distance = end - now;
if (distance < 0) {
clearInterval(timer);
document.getElementById(id).innerHTML = 'EXPIRED!';
return;
}
var days = Math.floor(distance / _day);
var hours = Math.floor((distance % _day) / _hour);
var minutes = Math.floor((distance % _hour) / _minute);
var seconds = Math.floor((distance % _minute) / _second);
document.getElementById(id).innerHTML = days + 'days ';
document.getElementById(id).innerHTML += hours + 'hrs ';
document.getElementById(id).innerHTML += minutes + 'mins ';
document.getElementById(id).innerHTML += seconds + 'secs';
}
timer = setInterval(showRemaining, 1000);
}
</script>
这里我们查询数据库一次(在呈现页面时),然后客户端 javascript 负责基于时间间隔的倒计时更新。
我看过
手头的问题是:
我在我的 MySQL 数据库中的 event.date
列中有一个日期,它是这样检索的:
app.get('/', (req, res) => {
var query1='SELECT event_date,... FROM event..';
connection.query(query1, function(err,results){
if (results) res.render('index', {data: results});
});
});
我想要的是在我的页面上启动一个计时器,它将记录 new Date();
和我存储的日期(例如 this)
index.ejs
<% data.some(function(d,index){ %>
<%= d.event_date %> //this prints the data here obviously
<% **How to implement the setInterval() here??** %>
<% })%>
我尝试了两种或更多的菜鸟方法,但都是徒劳的。我缺少什么概念?如何实现?
谢谢。
尝试做这样的事情(倒计时功能取自 this answer)
EJS模板代码:
<% data1.forEach(function(d, index){ %>
<div id="countdown<%= index %>"></div>
<% }) %>
<script>
<% data1.forEach(function(d, index){ %>
CountDownTimer("<%= d.event_date %>", "countdown<%= index %>");
<% })%>
function CountDownTimer(dt, id) {
var end = new Date(dt);
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var timer;
function showRemaining() {
var now = new Date();
var distance = end - now;
if (distance < 0) {
clearInterval(timer);
document.getElementById(id).innerHTML = 'EXPIRED!';
return;
}
var days = Math.floor(distance / _day);
var hours = Math.floor((distance % _day) / _hour);
var minutes = Math.floor((distance % _hour) / _minute);
var seconds = Math.floor((distance % _minute) / _second);
document.getElementById(id).innerHTML = days + 'days ';
document.getElementById(id).innerHTML += hours + 'hrs ';
document.getElementById(id).innerHTML += minutes + 'mins ';
document.getElementById(id).innerHTML += seconds + 'secs';
}
timer = setInterval(showRemaining, 1000);
}
</script>
这里我们查询数据库一次(在呈现页面时),然后客户端 javascript 负责基于时间间隔的倒计时更新。