繁体   English   中英

以秒为单位获取两个日期之间的时差

[英]Get time difference between two dates in seconds

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

  • 设定一个初始日期,即现在;
  • 设置一个最终日期,它将是初始日期加上未来的一些秒数(例如 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如注释中所指出的,除非您使用打字稿。


说明

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


咆哮

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

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


此答案的有用文档

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

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

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);
<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>

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

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

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

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 );

尝试使用高级编程语言中的专用函数。 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);

现在和 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;

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

let startTime = new Date(timeStamp1);
let endTime = new Date(timeStamp2);

以秒为单位获取日期之间的差异->

  let timeDiffInSeconds = Math.floor((endTime - startTime) / 1000);

但这会产生 utc 的结果(出于某种我不知道的原因)。 所以你必须考虑时区偏移,你可以通过添加来做到这一点

新的 Date().getTimezoneOffset();

但这会以分钟为单位提供时区偏移量,因此您必须将其乘以 60 才能获得以秒为单位的差异。

  let timeDiffInSecondsWithTZOffset = timeDiffInSeconds + (new Date().getTimezoneOffset() * 60);

这将产生根据任何时区正确的结果,并且不会根据您相对于 UTC 的时区添加/减去小时数。

  const getTimeBetweenDates = (startDate, endDate) => {
  const seconds = Math.floor((endDate - startDate) / 1000);
  const minutes = Math.floor(seconds / 60);
  const hours = Math.floor(minutes / 60);
  const days = Math.floor(hours / 24);
  return { seconds, minutes, hours, days };
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM