我试着在几秒钟内分辨出两个日期的区别。逻辑是这样的:

设定一个初始日期,可以是现在; 设置最终日期,即初始日期加上未来的某一秒数(例如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方法 需要比几秒钟更精确的精度吗?


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

你可以使用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);

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

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

进口的基础

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

使用new Date()定义两个日期。 使用date2计算两个日期的时间差。getTime() - date1。取得时间(); 计算no。两个日期之间的天数,用两个日期的时间差除以no。毫秒/天(10006060*24)


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

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

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增加/减去小时。


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