【问题标题】:I need to calculate an elapsed time between two date objects我需要计算两个日期对象之间的经过时间
【发布时间】:2011-07-09 18:20:19
【问题描述】:

我有一个从保存在数据库中的变量创建的日期对象。

var prevTime = Date(year,month,day,hour,minute);

我想计算这个时间和当前时间的差。

var thisTime = Date();

我正在这样做:

prevTime.getTime() - thisTime.getTime();

它给了我一个非常大的负数。我除以 1000 得到秒,然后除以 3600 得到小时。我需要以小时为单位的经过时间。我最终得到一个类似于 -756.00 的数字。如果当前时间大于上一次,为什么这个数字是负数?我做错了什么?

谢谢,

斯科特

【问题讨论】:

标签: javascript


【解决方案1】:

当前时间大于前一次,因此从较小的数字中减去较大的数字会得到一个负数。如果您想要时间上的正差,请颠倒顺序。还有比这更多的问题吗?

在这里演示:http://jsfiddle.net/jfriend00/NYSsp/

var prevTime = new Date(2011,1,1,0,0);  // Feb 1, 2011
var thisTime = new Date();              // now
var diff = thisTime.getTime() - prevTime.getTime();   // now - Feb 1
alert(diff / (1000*60*60*24));     // positive number of days

【讨论】:

  • 是的。我道歉。当我输入问题时,我很紧张。我正在做 thisTime.getTime() - prevTime.getTime();当我调试或输出到控制台时,我看到当前日期大于前一个日期。我似乎仍然得到太大的负数。有什么想法吗?
  • 看看我的小提琴的一个工作示例。这种类型的代码需要是: var prevTime = new Date(year,month,day,hour,minute);如果您希望能够调用 getTime() 方法,请在其中添加“新”。
  • 经过更多调试,问题似乎来自我如何创建上一个日期对象。这是一个代码sn-p:
  • 又做了一次。该死的! console.log('Yr: '+tcdYear+', Mn: '+tcdMon+', Dy: '+tcdDay+', Hr: '+tcdHour+', Mn: '+tcdMin); var tcdTime = new Date(tcdYear, tcdMon, tcdDay, tcdHour, tcdMin); console.log('tcdTime: '+tcdTime.getTime()+', '+tcdTime); var currentTime = new Date(); console.log('currentTime: '+currentTime.getTime()+', '+currentTime);
  • 控制台输出:1741Yr: 2011, Mn: 7, Dy: 9, Hr: 12, Mn: 52 /C:/Users/shill/Documents/bt/bt.js:1743tcdTime: 1312915920000,2011 年 8 月 9 日星期二 12:52:00 GMT-0600(山地夏令时间)/C:/Users/shill/Documents/bt/bt.js:1745currentTime: 1310237633608,2011 年 7 月 9 日星期六 12:53:53 GMT- 0600(山地夏令时)为什么第一个日期显示的是星期二而不是星期六?
【解决方案2】:

第一个必须更小才能得到负数。 您的第一次约会已经过去。

这是一个例子:

var a = new Date(2011,7,5,2,1,1) - new Date(2011,7,5,1,1,1);
alert(a); // 3600000 which is millisecond for 1 hour. Divide by this to get hours.

【讨论】:

  • 感谢您的示例。我发现了问题。我在上面描述过。
【解决方案3】:

如果您想要在网页上动态运行的日期和时间以及登录时间,即时钟从 java 函数 scipt 的开始开始,并且还给出了您在应用程序或特定项中在线的小时、分钟和秒数网页为此只需调用 html 正文加载中的 javascript 函数。

<script type="text/javascript">
var second;
var first = new Date;
function date_time() {
    var id = 'Label1'
    date = new Date;
    second = date.getTime();
    year = date.getFullYear();
    month = date.getMonth();
    months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
    d = date.getDate();
    day = date.getDay();
    days = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
    h = date.getHours();
    if (h < 10) {
        h = "0" + h;
    }
    m = date.getMinutes();
    if (m < 10) {
        m = "0" + m;
        //min = min+1;
    }
    s = date.getSeconds();
    if (s < 10) {
        s = "0" + s;
        //sec = sec+1;
    }
    var timeDiff = second - first.getTime();
    var hours = Math.floor(timeDiff / (1000 * 60 * 60));

    timeDiff -= hours * (1000 * 60 * 60);



    var mins = Math.floor(timeDiff / (1000 * 60));

    timeDiff -= mins * (1000 * 60);

    var secs = Math.floor(timeDiff / 1000)
    timeDiff -= secs * 1000;

    result = 'LoginTime(HH:MM:SS) ' + hours + ':' + mins + ':' + secs + ' ' + days[day] + ' ' + months[month] + ' ' + d + ' ' + year + ' Clock(24hr): ' + h + ':' + m + ':' + s;
    document.getElementById(id).innerHTML = result;
    setTimeout('date_time("' + id + '");', '1000');
    return true;
}

桑托什·库马尔·穆拉卡

【讨论】:

    【解决方案4】:

    检查一下:

    var first = new Date();
    for(i = 0; i<10000; i++) // Some loop to make a little time pass
    {
        i = i;
    }
    var second = new Date();
    
    second.getTime() - first.getTime();
    

    【讨论】:

    • 谢谢你的例子。如上所述,我发现了问题。
    • 从不阻止。请改用Timer
    猜你喜欢
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 2012-12-01
    • 2016-09-26
    相关资源
    最近更新 更多