【问题标题】:Calculate difference between 2 timestamps using javascript使用javascript计算2个时间戳之间的差异
【发布时间】:2013-05-21 23:07:23
【问题描述】:

我必须计算 2 个时间戳之间的差异。您还可以帮我将字符串转换为时间戳。仅使用纯 JavaScript。没有 JQUERY。

这是我的功能:

function clearInactiveSessions()
{
    alert("ok");
    <c:if test="${not empty pageScope.sessionView.sessionInfo}">
        var currentTime = new Date().getTime();
        alert("curr:"+currentTime);
        var difference=new Date();
        <c:forEach items="${pageScope.sessionView.sessionInfo}" var="inactiveSession">
            var lastAccessTime = ${inactiveSession.lastUpdate};
            difference.setTime(Maths.abs(currentTime.getTime()-lastAccessTime.getTime()));
            var timediff=diff.getTime();
            alert("timediff:"+timediff);
            var mins=Maths.floor(timediff/(1000*60*60*24*60));
            alert("mins:"+mins);
            if(mins<45)
                clearSession(${item.sessionID});
        </c:forEach>
    </c:if>
}

【问题讨论】:

  • “时间戳”是什么格式,ISO8601?非时间戳字符串看起来像……?
  • var diff=Math.abs(date1-date2);
  • @elclanrs——我想可能先进行一些解析。
  • @RobG 这是我在 List Mon May 27 11:46:15 IST 2013 中的格式。我需要将其转换为时间戳,以分钟为单位获取此时间与当前时间之间的差异.

标签: javascript timestamp


【解决方案1】:

我正在发布我自己的示例尝试在您的代码中实现它

function timeDifference(date1,date2) {
    var difference = date1.getTime() - date2.getTime();

    var daysDifference = Math.floor(difference/1000/60/60/24);
    difference -= daysDifference*1000*60*60*24

    var hoursDifference = Math.floor(difference/1000/60/60);
    difference -= hoursDifference*1000*60*60

    var minutesDifference = Math.floor(difference/1000/60);
    difference -= minutesDifference*1000*60

    var secondsDifference = Math.floor(difference/1000);

    console.log('difference = ' + 
      daysDifference + ' day/s ' + 
      hoursDifference + ' hour/s ' + 
      minutesDifference + ' minute/s ' + 
      secondsDifference + ' second/s ');
}

【讨论】:

  • 如果我需要 date1 中的当前时间怎么办?将 var date1=new Date.getTime();做这个把戏?
  • 如果我有一个像“Mon May 27 11:46:15 IST 2013”​​这样的字符串,我如何将其转换为时间戳并计算此时间与当前时间之间的分钟差..pleasE?跨度>
  • var date = new Date(Date.parse(YourstringDate.replace(/-/g, " ")));
  • 当我使用这个时: var temp_date = "Mon May 27 11:46:15 IST 2013"; var lastAccessTime = new Date(Date.parse(temp_date.replace(/-/g, " "))).getTime();警报(上次访问时间); -> 给我 NaN。为什么?
  • 将 temp_date 格式化为 dd/MM/yyy 或 dd/MMM/yyyy 等日期格式,然后尝试相同的代码
【解决方案2】:

如果您的字符串是 Mon May 27 11:46:15 IST 2013,您可以通过解析位将其转换为日期对象(假设月份为 3 个字母英文名称,根据需要进行调整):

// Convert string like Mon May 27 11:46:15 IST 2013 to date object 
function stringToDate(s) {
  s = s.split(/[\s:]+/);
  var months = {'jan':0, 'feb':1, 'mar':2, 'apr':3, 'may':4, 'jun':5, 
                'jul':6, 'aug':7, 'sep':8, 'oct':9, 'nov':10, 'dec':11};
  return new Date(s[7], months[s[1].toLowerCase()], s[2], s[3], s[4], s[5]);
}

alert(stringToDate('Mon May 27 11:46:15 IST 2013'));

请注意,如果您在同一时区使用日期字符串,则可以忽略时区以进行差异计算。如果它们位于不同的时区(包括夏令时的差异),那么您必须考虑这些差异。

【讨论】:

    【解决方案3】:

    根据批准的答案:

    function(timestamp1, timestamp2) {
        var difference = timestamp1 - timestamp2;
        var daysDifference = Math.floor(difference/1000/60/60/24);
    
        return daysDifference;
    }
    

    【讨论】:

    • 不知道为什么这被否决了。如果您的两个日期采用实际时间戳格式:例如1503964800000 (这绝对比包含/ 可能- 和不确定数量的0s 的废话更简单,并且三个成员有时会以某种安排出现,有时会出现另一种安排。)然后是更好、更简单的答案。
    【解决方案4】:

    更好的选择是使用 window.performance API.

    const startTime = window.performance.now()
    setTimeout(()=>{
     const endTime = window.performance.now()
     console.log("Time Elapsed : ",endTime-startTime) // logs ~2000 milliseconds
    }, 2000)

    【讨论】:

    • 如果使用 NodeJS,这里会有帮助 RequireJS (stackoverflow.com/questions/46436943/…) const {performance} = require('perf_hooks'); const t0 = performance.now(); ES6 Module import { performance } from 'perf_hooks'; const t0 = performance.now();
    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多