Javascript 返回当前日期和给定日期之间的差异,并附带条件

Javascript 返回当前日期和给定日期之间的差异,并附带条件,javascript,Javascript,我正在尝试一个非常简单的想法,但很难实现 我想以秒为单位返回两个给定日期和时间之间的差值。注意:我希望在这些条件下得到相同的结果: 不管我们是在Chrome还是Firefox上测试。在这两种情况下,它应该返回相同的结果 无论最终用户是否将其系统中的时区设置为不同的时区 所以我试了一下: //在下面输入您的自定义日期 施工日期=新日期('2020-6-24 14:22:00');//设定结束时间 const dif=(date.getTime()/1000)-(new date().getT

我正在尝试一个非常简单的想法,但很难实现

我想以秒为单位返回两个给定日期和时间之间的差值。注意:我希望在这些条件下得到相同的结果:

  • 不管我们是在Chrome还是Firefox上测试。在这两种情况下,它应该返回相同的结果
  • 无论最终用户是否将其系统中的时区设置为不同的时区
所以我试了一下:

//在下面输入您的自定义日期
施工日期=新日期('2020-6-24 14:22:00');//设定结束时间
const dif=(date.getTime()/1000)-(new date().getTime())/1000);

控制台日志(dif)使用
Date.now()
而不是
new Date()
可能更容易。这将返回可以轻松减去的毫秒数


只是别忘了在计算机上测量时间很奇怪。由于各种原因,您可以使用
结束-开始<0

处理日期和时间肯定会有很多问题,包括时区、闰年、闰秒和夏令时

然而,这里发生的事情似乎并非如此。请记住,JavaScript日期对象内部使用世界时(UTC),因此,一旦正确存储了时间,无论时区如何,都应该进行比较

我使用了这个函数:

const dateDiffSeconds = function(date1, date2) {
  return Math.round(Math.abs(date1.getTime()-date2.getTime())/1000);
}
请注意,我正在使用
Math.round()
Math.abs
进行取整,因此哪个日期更大并不重要。值得注意的是,您甚至可以不使用
getTime()
直接减去日期

当我在Firefox、Chrome和Node中使用各种测试运行它时,我得到了一致的结果,包括当我改变时区时

要运行的一个测试是:不使用当前时间,而是比较两个预选的常量日期

我怀疑您在以下一个或两个方面有问题:

  • 时区表示法:以UTC时间指定日期。如果希望德黑兰的用户看到与哈瓦那相同的时差,则必须确保发送给他们的日期相同。如果发送的日期未指定时区,则两个客户端都会将日期转换为本地时间,这意味着它们将被时区分隔。而是以UTC时间发送日期
  • 浏览器同步:在两个不同的浏览器中测试结果时,也可能没有足够紧密地保持同步。当我测试它时,我使用
    setInterval()
    和一个低超时设置(远低于一秒)来比较当前时间和测试日期。如果您只是手动刷新浏览器,时间可能不一样

  • 好啊谢谢你的回答。现在再加一个。。。我会测试这个。。。