new Date()返回undefined

时间:2017-04-10 08:26:53

标签: javascript undefined nan

我有这段代码:

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是一个数字。为什么?有解决方案吗?感谢

5 个答案:

答案 0 :(得分:1)

您需要将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();
    }
}

答案 1 :(得分:1)

在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();
}
 }

答案 2 :(得分:0)

您将endtime作为对象,因为新的Date()返回一个。您可以使用新的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转换为日期字符串,方法是将它们作为参数传递给新的Date()并使用任何转换方法。

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

小心。

答案 3 :(得分:0)

  1. 需要调用启动功能
  2. clicked变量为false,因此执行if(clicked === false)block
  3. 点击为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. 希望这个解决方案能帮到你......

答案 4 :(得分:0)

为此,请在函数

之外声明两个变量
clicked= false 

var starttime;

它看起来像:

 clicked= false;

 var starttime;

function start()
{

//your code

}

其余的代码很好。