Javascript 比较2个ISO 8601时间戳和输出秒/分钟差异

Javascript 比较2个ISO 8601时间戳和输出秒/分钟差异,javascript,Javascript,我需要编写JavaScript来比较两个ISO时间戳,然后打印出它们之间的差异,例如:“32秒” 下面是我在堆栈溢出上找到的一个函数,它将普通日期转换为ISO格式的日期。所以,这是第一件事,以ISO格式获取当前时间 接下来我需要做的是获取另一个ISO时间戳,将其与存储在对象中的ISO时间戳进行比较。可以这样访问它:marker.timestamp(如下面的代码所示)。现在我需要比较这两个时间戳,找出它们之间的区别。如果小于60秒,它应该以秒为单位输出,如果大于60秒,它应该在1分12秒前输出 谢

我需要编写JavaScript来比较两个ISO时间戳,然后打印出它们之间的差异,例如:“32秒”

下面是我在堆栈溢出上找到的一个函数,它将普通日期转换为ISO格式的日期。所以,这是第一件事,以ISO格式获取当前时间

接下来我需要做的是获取另一个ISO时间戳,将其与存储在对象中的ISO时间戳进行比较。可以这样访问它:marker.timestamp(如下面的代码所示)。现在我需要比较这两个时间戳,找出它们之间的区别。如果小于60秒,它应该以秒为单位输出,如果大于60秒,它应该在1分12秒前输出

谢谢

function ISODateString(d){
 function pad(n){return n<10 ? '0'+n : n}
 return d.getUTCFullYear()+'-'
      + pad(d.getUTCMonth()+1)+'-'
      + pad(d.getUTCDate())+'T'
      + pad(d.getUTCHours())+':'
      + pad(d.getUTCMinutes())+':'
      + pad(d.getUTCSeconds())+'Z'}

var date = new Date();
var currentISODateTime = ISODateString(date);
var ISODateTimeToCompareWith = marker.timestamp;

// Now how do I compare them?
函数ISODateString(d){

函数pad(n){return n我只会将日期对象存储为ISODate类的一部分。当需要显示它时,您只需执行字符串转换,例如在
toString
方法中。这样,您只需对日期类使用非常简单的逻辑即可确定两个ISODate之间的差异:

var difference = ISODate.date - ISODateToCompare.date;
if (difference > 60000) {
  // display minutes and seconds
} else {
  // display seconds
}

比较两个日期非常简单

var differenceInMs = dateNewer - dateOlder;
因此,将时间戳转换回日期实例

var d1 = new Date('2013-08-02T10:09:08Z'), // 10:09 to
    d2 = new Date('2013-08-02T10:20:08Z'); // 10:20 is 11 mins
明白了吗

var diff = d2 - d1;
根据需要格式化此文件

if (diff > 60e3) console.log(
    Math.floor(diff / 60e3), 'minutes ago'
);
else console.log(
    Math.floor(diff / 1e3), 'seconds ago'
);
// 11 minutes ago

我建议从两个时间戳中获取以秒为单位的时间,如下所示:

// currentISODateTime and ISODateTimeToCompareWith are ISO 8601 strings as defined in the original post
var firstDate = new Date(currentISODateTime),
    secondDate = new Date(ISODateTimeToCompareWith),
    firstDateInSeconds = firstDate.getTime() / 1000,
    secondDateInSeconds = secondDate.getTime() / 1000,
    difference = Math.abs(firstDateInSeconds - secondDateInSeconds);
然后使用
差异
。例如:

if (difference < 60) {
    alert(difference + ' seconds');
} else if (difference < 3600) {
    alert(Math.floor(difference / 60) + ' minutes');
} else {
    alert(Math.floor(difference / 3600) + ' hours');
}
if(差异<60){
警报(差值+秒);
}否则如果(差值<3600){
警报(数学楼层(差/60)+“分钟”);
}否则{
警报(数学下限(差/3600)+“小时”);
}

重要提示:我使用
Math.abs
以秒为单位比较日期,以获得它们之间的绝对差异,而不管哪一个更早。

因此,您要将
currentISODateTime
ISODateTimeToCompareWith
进行比较,并且它们都是ISO 8601格式的?@Campari是的,正是这样,然后输出它们之间的区别。它们都是ISO 8601格式。谢谢。数字后面的“e3”位是什么意思?哦,我明白了,我认为它只是60k的一个快捷方式。PDO这考虑了时区的任何差异,但是?对于多个时区的差异,在实例化日期时需要提供一个,或者已经提供了一个您的日期转换为单个时区。当我将时间从数据库存储到变量时,
diff
显示为
NAN
我发现您应该将
(新日期(ISO))除以。getTime()
乘以1000,而不是乘以1000,以秒为单位获得值。如果将日期从数据库存储到变量中,则此操作无效。