【问题标题】:How to obtain difference in minutes between two raw dates in javascript?如何在javascript中获得两个原始日期之间的分钟差?
【发布时间】:2015-02-05 03:19:21
【问题描述】:

如何在 javascript 中获取两个原始日期之间的分钟差?即用作“2 分钟前”、“10 分钟前”等。

我所说的 RAW 是指这种格式 -> 2015-02-05T03:11:33.301Z (var x = new Date())

这就是我所拥有的,但我总是在返回值中得到 NaN...

function getMinutesBetweenDates(startDate, index) {
    var endDate = new Date();
    var diff = endDate - startDate;
    return (diff / 60000);
}

感谢您的帮助。

【问题讨论】:

  • 你是怎么调用这个函数的??
  • getMinutesBetweenDates(aux[i]['date'], i);想象 aux[i]['date'] 是另一个新的 Date() 在几分钟前获得
  • 如果 startDate 是一个日期,那么该函数将返回一个十进制分钟的值。所以截断返回值去掉小数部分,加上' minutes ago'
  • 如果你得到的是 NaN,那么 startDate 不是 Date 对象。是(startDate instanceof Date)
  • 该死...我没想到... startDate 在调用函数之前用 JSON.parse 解析...所以它只是日期的格式而不是 instanceof Date : (

标签: javascript html date time


【解决方案1】:

我认为问题在于您调用函数的方式。

你应该像下面这样称呼它

var startDate = new Date("2015-02-05T03:11:33.301Z");
getMinutesBetweenDates(startDate); 

它会打印出类似下面的东西

11.711916666666667

只需在返回值之前使用Math.floor 即可得到11 的结果。

【讨论】:

    【解决方案2】:

    现代浏览器将正确解析 OP 格式(ISO 8601 版本)的字符串,但 IE 8 及更低版本等旧浏览器不会。手动解析字符串更安全:

    function parseISOutc(s) {
      var b = s.split(/\D/);
      return new Date(Date.UTC(b[0], b[1] - 1, b[2], b[3], b[4], b[5], (b[6] || 0)));
    }
    

    现在你的函数可以是:

    function getMinutesBetweenDates(startDate) {
        return ((new Date() - parseISOutc(startDate)) / 6e4 | 0) + ' minutes ago';
    }
    

    index 参数未使用,因此我将其删除。

    【讨论】:

      【解决方案3】:

      试试这个,

      您必须将startDate 转换为Date 对象,即使它是Date 对象的JSON 格式。原因是,当你减去时,Date 对象的valueOf 方法被调用并减去。 valueOf 方法的返回值在Date 对象和JSON 字符串中是不同的。

      function getMinutesBetweenDates(startDate) {
          var endDate = new Date();
          var startDate = new Date(startDate);
          document.write(startDate.valueOf());
          var diff = endDate - startDate;
          return (diff / 60000);
      }
      
      document.write(getMinutesBetweenDates("2015-02-05T03:11:33.301Z"));

      【讨论】:

      • 这将在 IE 8 及更低版本中愉快地返回 NaN。 ;-)
      猜你喜欢
      • 2016-02-11
      • 2018-11-08
      • 2014-01-17
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多