如何在jQuery中从固定时间连续检查时间
我有一个非常简单的问题,我需要在固定时间30分钟后做一些事情,然后在固定时间30分钟15秒后做其他事情。我正在使用下面的代码来实现这一点,但它似乎不起作用如何在jQuery中从固定时间连续检查时间,jquery,timer,Jquery,Timer,我有一个非常简单的问题,我需要在固定时间30分钟后做一些事情,然后在固定时间30分钟15秒后做其他事情。我正在使用下面的代码来实现这一点,但它似乎不起作用 <script type="text/javascript" src="<c:url value="/resources/js/date.js" />"></script> <script type="text/javascript" > $(document).ready(function
<script type="text/javascript" src="<c:url value="/resources/js/date.js" />"></script>
<script type="text/javascript" >
$(document).ready(function () {
jQuery.ajax({
url: "/wikedlynotsmart/creationTime",
success: function (data) {
var date = parseFloat(data.creationDate);
var timeCreation = new Date(date);
var timeAlert = new Date(timeCreation);
timeAlert.setMinutes(timeCreation.getMinutes() + 30);
var timeAutoSubmit = new Date(timeCreation);
timeAutoSubmit.setMinutes(timeCreation.getMinutes() + 30);
timeAutoSubmit.setSeconds(timeCreation.getSeconds() + 15);
setInterval(function () {
if (new Date() == timeAlert) {
alert("time is over");
}
if (new Date() == timeAutoSubmit) {
$('form').submit();
}
}, 1000);
},
async: false,
dataType: "json"
});
});
</script>
$(文档).ready(函数(){
jQuery.ajax({
url:“/wikedlynotsmart/creationTime”,
成功:功能(数据){
var日期=parseFloat(data.creationDate);
var timeCreation=新日期(日期);
var timeAlert=新日期(创建时间);
timeAlert.setMinutes(timeCreation.getMinutes()+30);
var timeAutoSubmit=新日期(timeCreation);
timeAutoSubmit.setMinutes(timeCreation.getMinutes()+30);
timeAutoSubmit.setSeconds(timeCreation.getSeconds()+15);
setInterval(函数(){
如果(新日期()==timeAlert){
警惕(“时间已过”);
}
如果(新日期()==timeAutoSubmit){
$('form').submit();
}
}, 1000);
},
async:false,
数据类型:“json”
});
});
有人能帮我理解我做错了吗
谢谢
编辑:“时间到了!”已被编辑为“时间已过”,但仍不起作用。将
setTimeout('myFunction();',1800000);
不工作
(1800000是以毫秒为单位的30分钟)。如果可以避免的话,不要每秒计算一次。好吧,你也不能比较
Date()
这样的对象
计算返回时间后30分钟到现在之间的初始延迟,并等待那么长时间,然后再等待15秒
var create = new Date(data.creationDate).getTime() + (30 * 60 * 1000);
var now = new Date().getTime();
var delay = Math.max(0, create - now); // initial delay
setTimeout(function() {
console.log("Time's up!"); // not alert() - that blocks the UI
setTimeout(function() {
$('form').submit();
}, 15000);
}, delay);
那这个怎么办?还有,你忘了在“时间到了!“。从AJAX调用返回数据时,
data.creationDate
将采用什么格式?您是否检查了“日期”以确保它是您期望的格式?@Alnitak:是的,它是从MVC控制器返回的json格式。是的,它是异步AJAX调用。@Grim:是的,我也检查了日期、timeCreation、timeAlert和timeValue,并且它们都显示了它们的值。如果有人重新加载页面呢?时间不会从0开始重新计时1800000吗?我需要在一个固定的时间内完成这两项任务,同步ajax请求将被发送到获得固定时间的MVC控制器。我第一次确实是这样做的,但意识到重新加载页面创建问题时:)不要将字符串传递给setTimeout
@skip-如果有人加载页面时需要计时器继续,则必须使用cookie或数据库(或其他持久方法)@FelixKling-完全正确,但我试图让生活变得简单。我怀疑使用setTimeout还是有问题的。@跳过1。你试图比较日期对象,这似乎是你做不到的。2.这些日期对象的分辨率为1ms,但你只是大约每1000毫秒检查一次。你的测试达到精确毫秒的几率当这段时间过去的时候,我们可以忽略不计。