Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何以字符串形式从我的集合中获取数据?_Javascript_Object_Meteor_Collections_Countdown - Fatal编程技术网

Javascript 如何以字符串形式从我的集合中获取数据?

Javascript 如何以字符串形式从我的集合中获取数据?,javascript,object,meteor,collections,countdown,Javascript,Object,Meteor,Collections,Countdown,我编写了一个日期选择器,用户可以在其中使用bootstrap在输入字段中输入日期: <template name="date"> <form> <div class="input-group datetimepicker"> <input name="date" class="set-due-date form-control" type="text"/> <s

我编写了一个日期选择器,用户可以在其中使用bootstrap在输入字段中输入日期:

    <template name="date">
      <form>
         <div class="input-group datetimepicker">
           <input name="date" class="set-due-date form-control" type="text"/>
           <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
         </div>
          ...
     </form>
    </template>
在那里,我想为我的倒计时计时器获取closeDateDB的信息,并在endtime>currentTime时重定向用户

var timeinterval;

  Meteor.startup(function () {
    var endtime = *The closeDateDB of the submitted form!;*
    timeinterval = setInterval(function () {
      Meteor.call("getCurrentTime", function (error, result) {
        Session.set("time", result);
        var t = getTimeRemaining(endtime);
        Session.set("t", t);
      });
    }, 1000);
  });

  function getTimeRemaining(endtime){
    var t = Date.parse(endtime) - Session.get('time');
    var seconds = ("0" + Math.floor( (t/1000) % 60 )).slice(-2);
    var minutes = ("0" + Math.floor( (t/1000/60) % 60 )).slice(-2);
    var hours = ("0" + Math.floor( (t/(1000*60*60)) % 24 )).slice(-2);
    var days = Math.floor( t/(1000*60*60*24) );


    if(t <= 0) {
      clearInterval(timeinterval);
      Router.go('finalpage');
   }
    return {
      'total': t,
      'days': days,
      'hours': hours,
      'minutes': minutes,
      'seconds': seconds
    };

  }

  Template.countdown.helpers({
    t: function () {
      return Session.get("t");
    }
  });

  Template.body.helpers({
    ended:function () {
      console.log(Session.get("t").total <= 0);
      return Session.get("t").total <= 0;
    }
  });


Template.date.onRendered(function() {
    this.$('.datetimepicker').datetimepicker({
      locale: 'en',
      format: 'MM/DD/YYYY'
    });
});
var时间间隔;
Meteor.startup(函数(){
var endtime=*提交表单的closeDateDB*
timeinterval=setInterval(函数(){
Meteor.call(“getCurrentTime”,函数(错误,结果){
设置(“时间”,结果);
var t=GetTime剩余时间(endtime);
Session.set(“t”,t);
});
}, 1000);
});
函数getTimeRemaining(endtime){
var t=Date.parse(endtime)-Session.get('time');
变量秒=(“0”+数学地板((t/1000)%60)).slice(-2);
变量分钟=(“0”+数学地板((t/1000/60)%60))。切片(-2);
变量时数=(“0”+数学层((t/(1000*60*60))%24)).slice(-2);
风险天数=数学下限(t/(1000*60*60*24));
if(t)
  • 您需要确保以时间格式保存
    closeDateDB
    ,以便可以直接将其与当前时间进行比较,即
    if(closeDateDB>new Date())
    closeDateDB
    为字符串时不起作用
  • 你正在以一种非常复杂的方式进行倒计时。使用软件包使时间本身成为反应性的,并节省大部分代码

  • 我不完全理解你的问题,但它的核心似乎是“在endtime>currentTime时重定向用户”。如果
    endtime
    currentTime
    之间的差异是秒而不是分钟,则可以使用
    setTimeout
    。否则,您应该使用cron作业将
    问题标记为“就绪”在
    结束时间
    或类似的时间。同样,问题并不清楚,一些关于您试图实现的目标的更广泛的信息会有所帮助。第一步是提交一个表单,其中包含一些信息,如
    closeDateDB
    ,这应该是我的计数器的结束时间。然后,用户将被重定向到一个新页面with router.go。将有一个决策页面,用户可以在该页面中对currentTime>endtime的数量的特定问题写一些评论。当时间结束时,该页面应关闭,另一个router.go应将其重定向到结果页面。但我不知道如何从我的收藏中获取
    closeDateDB
    ,并将其设置为endtime
    。我尝试了类似于
    Question.findOne();
    的方法,但不知道如何获取字符串,但如何以时间格式获取closeDateDB?目前,我只获取了
    $('[name=“date”]')。val()
    。这将在我的数据库中保存一个字符串日历控件可能会为您提供特定的字符串格式,例如
    yyyy/MM/dd
    。解析该格式并使
    var d=new Date(yyyy,MM,dd)
    .IMO最好在保存时执行此操作,而不是每次读取时都要分析数据。此外,它还可以让您对MongoDB执行日期查询,而这是字符串永远无法执行的。看起来您正在使用引导datetimepicker()它使用momentjs。因此您可以从输入的字符串值解析日期对象,如下所示:
    moment($('[name=“Date”]').val(),'MM/DD/YYYY').toDate();
    。然后将其保存到您的集合中,您就可以进行日期比较了。是的,您是对的,我正在使用bootstrap datetimepicker。我尝试了它,现在从输入的字符串值中获得了一个日期对象。但是如何为我的
    var endtime
    获取它?您的
    endtime
    不是原来的
    closeDateDB
    吗键入日期?
    var timeinterval;
    
      Meteor.startup(function () {
        var endtime = *The closeDateDB of the submitted form!;*
        timeinterval = setInterval(function () {
          Meteor.call("getCurrentTime", function (error, result) {
            Session.set("time", result);
            var t = getTimeRemaining(endtime);
            Session.set("t", t);
          });
        }, 1000);
      });
    
      function getTimeRemaining(endtime){
        var t = Date.parse(endtime) - Session.get('time');
        var seconds = ("0" + Math.floor( (t/1000) % 60 )).slice(-2);
        var minutes = ("0" + Math.floor( (t/1000/60) % 60 )).slice(-2);
        var hours = ("0" + Math.floor( (t/(1000*60*60)) % 24 )).slice(-2);
        var days = Math.floor( t/(1000*60*60*24) );
    
    
        if(t <= 0) {
          clearInterval(timeinterval);
          Router.go('finalpage');
       }
        return {
          'total': t,
          'days': days,
          'hours': hours,
          'minutes': minutes,
          'seconds': seconds
        };
    
      }
    
      Template.countdown.helpers({
        t: function () {
          return Session.get("t");
        }
      });
    
      Template.body.helpers({
        ended:function () {
          console.log(Session.get("t").total <= 0);
          return Session.get("t").total <= 0;
        }
      });
    
    
    Template.date.onRendered(function() {
        this.$('.datetimepicker').datetimepicker({
          locale: 'en',
          format: 'MM/DD/YYYY'
        });
    });