我试着在几秒钟内分辨出两个日期的区别。逻辑是这样的:
设定一个初始日期,可以是现在;
设置最终日期,即初始日期加上未来的某一秒数(例如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除以秒,但我从来没有做对。我的逻辑有什么问题吗?我可能犯了一些愚蠢的错误,因为已经很晚了,但它困扰着我,我不能让它工作:)
的代码
var startDate = new Date();
// Do your operations
var endDate = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;
或者更简单(endDate - startDate) / 1000,就像注释中指出的那样,除非你使用的是typescript。
的解释
您需要为Date对象调用getTime()方法,然后简单地减去它们并除以1000(因为最初的单位是毫秒)。另外,当调用getDate()方法时,实际上得到的是1到31之间的整数(不是以零为基础),而不是调用getTime()方法得到的epoch时间,表示自1970年1月1日00:00以来的毫秒数
Rant
根据您的日期相关操作,您可能想要集成一个库,如day.js或Luxon,这使开发人员更容易,但这只是个人偏好的问题。
例如在卢克松,我们会用t1。Diff (t2,秒)很漂亮。
有用的文档可以回答这个问题
为什么是1970年?
日期对象
日期的getTime方法
Date的getDate方法
需要比几秒钟更精确的精度吗?
let startTime = new Date(timeStamp1);
let endTime = new Date(timeStamp2);
以秒为单位获取日期之间的差异->
let timeDiffInSeconds = Math.floor((endTime - startTime) / 1000);
但是这会产生utc的结果(出于一些我不知道的原因)。
因此,必须考虑时区偏移,可以通过添加来实现
新的日期().getTimezoneOffset ();
但是这给出了以分钟为单位的时区偏移,因此您必须将其乘以60才能得到以秒为单位的差异。
let timeDiffInSecondsWithTZOffset = timeDiffInSeconds + (new Date().getTimezoneOffset() * 60);
这将根据任何时区产生正确的结果,不会根据您的时区相对于utc增加/减去小时。