【问题标题】:Get time difference between two dates in seconds以秒为单位获取两个日期之间的时间差
【发布时间】:2012-12-03 09:30:31
【问题描述】:

我试图在几秒钟内得到两个日期之间的差异。逻辑是这样的:

  • 设置一个初始日期,即现在;
  • 设置一个最终日期,它是初始日期加上未来的一些秒数(例如 15 秒)
  • 获取这两者之间的差异(秒数)

我之所以用日期来做是因为最终日期/时间取决于其他一些变量,而且它永远不会相同(这取决于用户做某事的速度),而且我还存储了初始日期其他的东西。

我一直在尝试这样的事情:

var _initial = new Date(),
    _initial = _initial.setDate(_initial.getDate()),
    _final = new Date(_initial);
    _final = _final.setDate(_final.getDate() + 15 / 1000 * 60);

var dif = Math.round((_final - _initial) / (1000 * 60));

问题是我从来没有得到正确的区别。我尝试除以24 * 60,这会让我只剩下几秒钟,但我从来没有做对。那么我的逻辑有什么问题?我可能会犯一些愚蠢的错误,因为已经很晚了,但是我无法让它工作让我很困扰:)

【问题讨论】:

  • 操作顺序是关键。
  • 所以你想要一个时间戳,加上 15 秒,然后看看相差多少秒。我会说差异很大的可能性是......等待它...... 15秒?
  • 我真的明白你想要做什么(我认为),但如果你使用 new Date(),这是现在的 unix 时间,添加 15 秒,然后立即检查差异,差异将是 15 秒(减去计算所需的毫秒数),但我猜你的意图是在未来以某种方式进行比较。
  • 我真的不明白,为了证明我的观点,这是一个适用于上述示例的FIDDLE。如果你想弄清楚用户做某事花了多长时间,你通常会得到用户开始操作时的时间戳,以及用户完成操作时的时间戳,然后比较它们,你就知道花了多长时间. 15 秒到底是什么鬼?

标签: javascript date


【解决方案1】:

代码

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

或者更简单的(endDate - startDate) / 1000 如 cmets 中所指出的,除非您使用的是打字稿。


解释

您需要为Date 对象调用getTime() 方法,然后简单地将它们相减并除以1000(因为它最初以毫秒为单位)。另外,当您调用 getDate() 方法时,您实际上将月份中的日期作为 1 到 31 之间的整数(不是从零开始),而不是从调用中获得的纪元时间getTime() 方法,表示自1970 年 1 月 1 日 00:00 以来的毫秒数


咆哮

根据与日期相关的操作,您可能希望投资集成一个库,例如 date.jsmoment.js,这会使开发人员的工作变得轻松,但这只是个人喜好问题。

例如在moment.js 中,我们会使用moment1.diff(moment2, "seconds"),这很漂亮。


此答案的有用文档

【讨论】:

  • 不需要 getTIme,日期可以相互减去,因为 - 运算符会将它们强制转换为数字。
  • getTime 是必要的,如果你使用打字稿它不允许除任何、数字或枚举以外的元素之间的算术运算
  • 您可以使用.valueOf(),这是- 运算符在任何情况下都会调用的...
  • 如果我们也需要小时/分钟的时间差...?我应该将它除以 60 还是它的倍数...? @胡安
  • 请将新的疑问添加为个别问题,但由于此问题可能会作为重复问题关闭,请查看此处stackoverflow.com/questions/1322732/…
【解决方案2】:

您可以使用new Date().getTime() 获取时间戳。然后你可以计算结束和开始之间的差异,最后将时间戳ms转换为s

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);

【讨论】:

  • 我们为什么要做 %60?
  • @Anand Shiva 这会将结果限制为 0-59,因为余数运算符 (%) 返回除法运算的余数和 60 % 60 = 0
  • 为什么要限制0-59之间的时间?我们试图以秒为单位计算两次之间的差异。现在和5分钟后的差是300秒。我们不会试图告诉它是 300%60 对...
【解决方案3】:
<script type="text/javascript">
var _initial = '2015-05-21T10:17:28.593Z';
var fromTime = new Date(_initial);
var toTime = new Date();

var differenceTravel = toTime.getTime() - fromTime.getTime();
var seconds = Math.floor((differenceTravel) / (1000));
document.write('+ seconds +');
</script>

【讨论】:

    【解决方案4】:

    准确快速将在几秒钟内给出输出:

     let startDate = new Date()
     let endDate = new Date("yyyy-MM-dd'T'HH:mm:ssZ");
     let seconds = Math.round((endDate.getTime() - startDate.getTime()) / 1000);
    

    【讨论】:

      【解决方案5】:

      下面的代码将以秒为单位给出时间差。

      var date1 = new Date(); // current date
      var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
      var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
      var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second
      
      alert(timeDiffInSecond );
      

      【讨论】:

        【解决方案6】:

        尝试使用高级编程语言的专用函数。 JavaScript .getSeconds(); 适合这里:

        var specifiedTime = new Date("November 02, 2017 06:00:00");
        var specifiedTimeSeconds = specifiedTime.getSeconds(); 
        
        var currentTime = new Date();
        var currentTimeSeconds = currentTime.getSeconds(); 
        
        alert(specifiedTimeSeconds-currentTimeSeconds);
        

        【讨论】:

        • 嗯? .getSeconds() 只返回日期时间的秒部分。假装开始时间 = 0 分 58 秒。结束时间 = 5 分 02 秒。您的代码将响应 -56 秒作为持续时间,这是完全失败的。
        【解决方案7】:

        现在和 10 分钟后使用 momentjs 的时间差

        let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
        let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');
        
        let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
        let diff_seconds = diff_milliseconds * 1000;
        

        【讨论】:

          【解决方案8】:

          使用 new Date() 定义两个日期。 使用 date2 计算两个日期的时间差。 getTime() - 日期 1。获取时间(); 计算编号。两个日期之间的天数,将两个日期的时间差除以 no。一天中的毫秒数 (10006060*24)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-04-01
            • 2012-09-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-27
            • 1970-01-01
            • 2018-08-08
            相关资源
            最近更新 更多