如何在jQuery中从固定时间连续检查时间

如何在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

我有一个非常简单的问题,我需要在固定时间30分钟后做一些事情,然后在固定时间30分钟15秒后做其他事情。我正在使用下面的代码来实现这一点,但它似乎不起作用

<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毫秒检查一次。你的测试达到精确毫秒的几率当这段时间过去的时候,我们可以忽略不计。