【问题标题】:how to run a javascript function on the given date time如何在给定的日期时间运行 javascript 函数
【发布时间】:2015-05-06 10:29:54
【问题描述】:

我只想在给定的日期/时间运行一些特定的javascript function 一次。 例如,我在php 中有一个日期时间变量,如下所示。

  $date = "May 7, 2015 17:08:43";

我有一些类似的功能

 function some_function()
 {
   .....
   .....
 } 

如何在给定的日期时间May 7, 2015 17:08:43 只运行一次此功能。

我试过了,但它不能正常工作。

var date = "<?php echo date('n/j/Y/H:i', strtotime($date));?>";
var myDate = new Date();
var current_date =  (myDate.getMonth()+1)  + "/" + myDate.getDate() + "/" + myDate.getFullYear()+ "/"+ myDate.getHours() + ":" + myDate.getMinutes();
var interval = setInterval(function() { 
    if(date==current_date)
    {
       some_function();           

    }

}, 4000);
clearInterval(interval);

有什么好的技巧吗?

【问题讨论】:

  • 我需要知道some_function() 会做什么
  • 每 4000 人可以跳过你想要的那一分钟......
  • 这里some_function用于使用location.reload();重新加载页面

标签: javascript php datetime


【解决方案1】:

我认为,你可以这样做:

setInterval(function() {
    var myDate = new Date();
    $date = "May 06 2015 13:50:40";
    var reg = new RegExp('\(' + $date.replace(/\s/g, "\\s") + '\)', 'g');
    console.log(myDate)
    if ( myDate.toString().match($date) ) {
        do_something();
    }
}, 1000);

这里是演示:http://jsfiddle.net/pj1248xq/

注意:您需要根据您要执行function的真实日期更改日期

【讨论】:

  • 这是错误的。尽管通过字符串表示来比较时间戳是一个非常糟糕的主意,但您正在检查在执行代码时可能永远不会发生的完全匹配。 Javascript 是单线程的,当任何事件(如超时)触发时,它的处理程序会在程序循环中排队以尽快执行。所以当 timeout 触发时,如果你正在执行一个延迟超过一秒的任务,你的 cumparsion 将不匹配。
  • 例子:function now(){return (new Date()).getTime()};>var t=now()+300000;while(now()
  • 我测试了它,它匹配! :)
  • 在发布这个anwser之前,我做了一个测试! :)
  • 当然!!它可以匹配。我说的是不能保证。如果您在上面提供的片段中再次测试(用您的代码替换“>”),您可以确认它不会在任何时候触发(甚至过去五分钟循环)。
【解决方案2】:

计算服务器端的秒数
使用setTimeout(function(){ some_function(); }, nbreOfSeconds);

setInterval() 将在指定的时间间隔评估您的表达式

【讨论】:

    【解决方案3】:

    您可以使用此 javascript 方法。将您的给定时间转换为毫秒。

    setInterval(function(){ alert("Hello"); }, 3000);
    

    【讨论】:

      【解决方案4】:
      function runAt (cbk, timestamp) {
          if (
              ! (timestamp instanceof Date)
              || isNaN (timestamp.getTime())
          ) throw "timestamp should be a valid Date object";
          var ms = timestamp - (new Date()).getTime();
          if (ms < 0) throw "Too late!!";
          setTimeout(cbk, ms);
      };
      

      您可以“随时”通过以下方式对其进行测试:

      runAt(function(){console.log("Hello!!");}, new Date(new Date().getTime() + 5000));
      

      【讨论】:

        【解决方案5】:

        github 有一个对此有用的小型库

        本机 setTimeout 函数仅限于 INT32(2147483647 毫秒或大约 24.8 天)。这个库可以设置几乎无限延迟的超时。

        一旦你包含了这个库,你可以像这样设置超时:

        // extra zeros need to get the time in milliseconds (as in JavaScript)
        var date = <?php echo strtotime($date);?>000;
        var id = timeout.set(some_function, date);
        
        function some_function()
        {
            // do some cool stuff
            timeout.clear(id);
        }
        

        【讨论】:

          【解决方案6】:

          您必须使用 setTimeout 函数而不是 setInterval 正如@Halayem 所说 因为 setTimeout执行一次 间隔 结束

          setInterval 将被执行,然后等待 period(nbreOfSeconds) 然后再次循环

          好的,您可以使用 Jquery(简单的选项)进行 ajax 调用,并在您的服务器端语言中检查日期 然后返回一个 json 状态对象,例如

          这是一个简单的例子:

          check_date.php 内容(该文件用于检查日期):

          <?php
             $date = date('n/j/Y/H:i', strtotime($date));
             if($date == 'your wanted date'){
                return json_encode(array('status'=>1));
             }else{
                return json_encode(array('status'=>0));
             }
          ?>
          

          这是你的 JavaScript 代码: 当然你应该先加载 jquery

          //here is a jquery cdn link : 
          <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
          <script>
          $(document).ready(function(){
              $.('check_date.php',{},function(serverRespond){
                 jsonRespond = JSON.parse(serverRespond);
                 if(jsonRespond.status === 1){
                    setTimeout(function(){
                      // here is your js function that you want to execute 
                    },afterMilSeconds);
          
                 }
              });
          });
          </script>
          

          【讨论】:

            猜你喜欢
            • 2016-05-28
            • 1970-01-01
            • 2016-11-27
            • 1970-01-01
            • 2021-06-07
            • 2014-09-04
            • 1970-01-01
            • 2021-12-19
            • 2018-12-30
            相关资源
            最近更新 更多