【问题标题】:How to get time difference between two timestamps in seconds with jQuery?如何使用jQuery以秒为单位获取两个时间戳之间的时间差?
【发布时间】:2014-02-26 07:35:34
【问题描述】:

我想根据 MySQL 时间戳显示 x seconds ago

我找到了名为timeago的插件

但我找不到让它只显示几秒钟的方法。

61 秒或 300 秒我没问题。使用 timeago 或纯 jQuery / JavaScript 将输出转换为秒的任何方法?

感谢您的帮助!

编辑:

示例案例:

$time1 = "2014-02-02 23:54:04"; // plus PHP ways to format it.
//$time2 = NOW() , or date(); whatever. 

我只想知道距离$time1 有多少秒。

编辑 2:

工作代码:

<script type="text/javascript">
$(function(){
    var d2 = new Date();
    var d1 = new Date("2014-02-02 23:54:04");
    $("a#timedif").html("Diff. Seconds : "+((d2-d1)/100).toString());
    // note that you may want to round the value
});
</script>

它输出Diff. Seconds : NaN

【问题讨论】:

  • 您是否设法以 JS 对象的形式获取时间戳?如果有,它是什么类型的物体?
  • @impinball 不,但这没问题。我可以将 echo 与 PHP 一起放入 &lt;script> 标记中。 编辑:我不知道。我将根据 JS 函数的需要使用 PHP 进行格式化。 CodeToad 谢谢。一个例子就是一个很好的答案!
  • 请提供两个示例日期字符串。请参阅下面的答案以了解解析后的操作。
  • 我添加了示例案例。不知道如何解析成 JS。让我谷歌:)

标签: javascript jquery time seconds timeago


【解决方案1】:

获取两个时间戳之间的差异

秒数: (通过 new Date().getTime() 获取时间戳)

diff_in_time = (timestamp_1 - timestamp2);

天数:

diff_in_days = parseInt((timestamp_1 - timestamp2) / (1000 * 3600 * 24));

【讨论】:

    【解决方案2】:

    我使用时差分别计算每个值

    var start = new Date('Mon Jul 30 2018 19:35:35 GMT+0500');
    var end = new Date('Mon Jul 30 2018 21:15:00 GMT+0500');
    
    var hrs = end.getHours() - start.getHours();
    var min = end.getMinutes() - start.getMinutes(); 
    var sec = end.getSeconds() - start.getSeconds();  
    
    var hour_carry = 0;
    var minutes_carry = 0;
    if(min < 0){
           min += 60;
           hour_carry += 1;
       }
    hrs = hrs - hour_carry;
    if(sec < 0){
           sec += 60;
           minutes_carry += 1;
       }
    
    min = min - minutes_carry;
    
    console.log("hrs",hrs);
    console.log("min",min);
    console.log("sec",sec);
    console.log(hrs + "hrs " + min +"min " + sec + "sec");
    

    【讨论】:

      【解决方案3】:

      jQuery 只是一个 JavaScript 库,因此 JavaScript 只能在您的 jQuery 脚本中工作:

      // specified date:
      var oneDate = new Date("November 02, 2017 06:00:00");
      
      // number of milliseconds since midnight Jan 1 1970 till specified date
      var oneDateMiliseconds = oneDate.getTime();
      
      // number of milliseconds since midnight Jan 1 1970 till now
      var currentMiliseconds = Date.now(); 
      
      // return time difference in milliseconds
      var timePassedInMilliseconds = (currentMiliseconds-oneDateMiliseconds)/1000;
      alert(timePassedInMilliseconds);
      

      【讨论】:

        【解决方案4】:

        假设您将字符串解析为 JavaScript 日期对象,您可以这样做 (date2 - date1)/1000

        要解析mysql格式时间戳,只需将字符串输入new Date():

         var d2 = new Date('2038-01-19 03:14:07');
         var d1 = new Date('2038-01-19 03:10:07');
        
         var seconds =  (d2- d1)/1000;
        

        修复问题中的编辑 2:

        <script type="text/javascript">
        $(function(){
        var d2 = new Date();
        var d1 = new Date("2014-02-02 23:54:04");
        $("a#timedif").html("Diff. Seconds : "+((d2-d1)/1000).toString());
         });
        

        【讨论】:

        • 几乎完美。用当前日期时间构造 d2 的任何方法?
        • 当前时间只是 new Date() no param
        • 天哪,这很简单 :) 让我试着接受你的回答。
        • 如果您从服务器获取一个日期,另一个从客户端获取,则需要确保两者在同一时区,例如 UTC
        • 是的。也许我会使用 SELECT NOW() 从 MySQL 获取日期:但是我得到的是 NaN。请参阅问题中的编辑 2。
        【解决方案5】:

        如果你对那个插件没问题,你可以稍微修改一下,让它只用几秒钟就可以工作

          var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
            seconds < 90 && substitute($l.minute, 1) ||
            minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
            minutes < 90 && substitute($l.hour, 1) ||
            hours < 24 && substitute($l.hours, Math.round(hours)) ||
            hours < 42 && substitute($l.day, 1) ||
            days < 30 && substitute($l.days, Math.round(days)) ||
            days < 45 && substitute($l.month, 1) ||
            days < 365 && substitute($l.months, Math.round(days / 30)) ||
            years < 1.5 && substitute($l.year, 1) ||
            substitute($l.years, Math.round(years));
        

        使用这部分,只需要转换为秒

        看小提琴:http://jsfiddle.net/zGXLU/1/

        【讨论】:

        • 那是哪个插件?你确定你没有忘记任何东西(比如$lsubstitute)?如何修改?
        • 这是来自timeago 插件,它只是你需要修改的副本
        猜你喜欢
        • 2021-01-04
        • 2012-12-03
        • 1970-01-01
        • 2021-05-14
        • 2012-07-22
        • 1970-01-01
        • 1970-01-01
        • 2017-06-24
        • 2016-07-21
        相关资源
        最近更新 更多