【问题标题】:new Date() returns undefined新日期()返回未定义
【发布时间】:2017-09-05 04:53:53
【问题描述】:

我有这个代码:

function submit(){
//Some stuff here...

clicked= false

//Some stuff here...

function start() {
    var starttime;
    if(clicked===false)
    {
        document.getElementById("start").innerHTML = "Submit";
        starttime = new Date();
        document.getElementById("title").innerHTML = "<b>...</b>";
        clicked=true;
    } else {
        var endtime = new Date();
        var timediff = endtime - starttime;
        alert(typeof endtime + typeof starttime + typeof timediff + timediff + endtime + starttime);
        submit();
    }
}

timediff 总是返回 NaN。当我使用 typeof 时,starttime 是未定义的,endtime 是一个对象,timediff 是一个数字。为什么?有解决办法吗?谢谢

【问题讨论】:

  • 在函数外定义var starttime;
  • 在函数范围内定义;第二次调用start 它没有任何价值。将声明移动到包含范围,类似于clicked

标签: javascript undefined nan


【解决方案1】:

您将 endtime 作为一个对象,因为 new Date() 返回一个。您可以使用 new Date().getTime() 返回 1970 年 1 月 1 日午夜与指定/当前日期之间的毫秒数。

startTime 是未定义的,因为你没有初始化它,所以如果 else 块运行,它的值将是未定义的。所以我希望这能解决你的问题。

function submit(){
//Some stuff here...

var starttime = new Date().getTime();
var clicked = false

//Some stuff here...

function start() {

    if(clicked===false)
    {
        document.getElementById("start").innerHTML = "Submit";
        //starttime = new Date();
        document.getElementById("title").innerHTML = "<b>...</b>";
        clicked=true;
    } else {
        var endtime = new Date().getTime();
        var timediff = endtime - starttime;
        alert(typeof endtime + typeof starttime + typeof timediff + timediff + endtime + starttime);
        submit();
    }
}

Yon 始终可以将 startTime 和 endTime 转换为日期字符串,方法是将它们作为参数传递给 new Date() 并使用任何转换方法。

new Date(1491813677908).toString();
new Date(1491813677908).toLocaleString();

保重。

【讨论】:

    【解决方案2】:

    为此,请在函数外部声明两个变量

    clicked= false 
    
    var starttime;
    

    它看起来像:

     clicked= false;
    
     var starttime;
    
    function start()
    {
    
    //your code
    
    }
    

    其余代码没问题。

    【讨论】:

      【解决方案3】:
      1. 需要调用启动函数
      2. clicked 变量为 false 因此执行 if(clicked===false) 块
      3. 将 clicked 设为 true 不会实例化 starttime

        function submit(){
            var clicked= true;
        
        function start() {
            var starttime = new Date();
            if(!clicked)
            {
                alert("When clicked is : "+clicked);
                alert(starttime);
                clicked=true;
            } else {
                alert("When clicked is : "+clicked)
                var endtime = new Date();
                var timediff = endtime - starttime;
                /*
                alert(typeof starttime);
                alert(typeof endtime);
                alert(typeof timediff);
                */
                alert("starttime "+starttime);
                alert("endtime "+endtime);
                alert("timediff "+timediff);
            }
          }
           start();
        }
        submit();
        

      希望这个解决方案对您有所帮助...

      【讨论】:

        【解决方案4】:

        在 Date 对象上使用 getTime 函数来获取差异

        function submit(){
         //Some stuff here...
        
        clicked= false
        
         //Some stuff here...
        
        function start() {
          var starttime;
          if(clicked===false)
          {
            document.getElementById("start").innerHTML = "Submit";
            starttime = new Date();
            document.getElementById("title").innerHTML = "<b>...</b>";
            clicked=true;
           } else {
            var endtime = new Date();
            var timediff = endtime.getTime() - starttime.getTime();
        
            submit();
        }
         }
        

        【讨论】:

          【解决方案5】:

          您需要将 starttime 设为全局才能使其正常工作:

          clicked= false;
          var starttime;
          
          //Some stuff here...
          
          function start() {
          
              if(clicked === false) {
                  document.getElementById("start").innerHTML = "Submit";
                  starttime = new Date();
                  document.getElementById("title").innerHTML = "<b>...</b>";
                  clicked=true;
              } else {
                  var endtime = new Date();
                  var timediff = endtime - starttime;
                  alert(typeof endtime + typeof starttime + typeof timediff + timediff + endtime + starttime);
                  submit();
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-17
            • 2018-05-21
            • 1970-01-01
            相关资源
            最近更新 更多