新日期()returns未定义

new Date() returns undefined

我有这个代码:

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 总是 returns NaN。当我使用 typeof 时,starttime 是未定义的,endtime 是一个对象,timediff 是一个数字。为什么?有解决办法吗?谢谢

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

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

您将结束时间作为一个对象,因为 new Date() return 是一个对象。您可以使用 new Date().getTime() 来 return 1970 年 1 月 1 日午夜与 specified/current 日期之间的毫秒数。

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

保重。

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

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

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

clicked= false 

var starttime;

它看起来像:

 clicked= false;

 var starttime;

function start()
{

//your code

}

其余代码没问题。