从JSON获取最短和最长日期

时间:2016-11-02 05:09:16

标签: javascript

有JSON:

[{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}]

在JavaScript中获取它的最大和最小日期?

4 个答案:

答案 0 :(得分:1)

var array = [{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}];

var max = null;
var min = null;

for (var i = 0; i < array.length; i++) {
  var current = array[i];
  if (max === null || current.source > max.source) {
    max = current;
  }
  if (min === null || current.source < min.source) {
    min = current;
  }
}

document.getElementById('maxResult').innerHTML = max.source;
document.getElementById('minResult').innerHTML = min.source;
Max: <span id="maxResult"></span><br/ >
Min: <span id="minResult"></span>

答案 1 :(得分:1)

如果您的日期格式为“yyyy-MM-dd”,您可以执行此类操作。

将日期字符串转换为dateKey。随着日期的进行,它始终遵循升序。 20160101(1月1日)总是低于20161231(12月31日)。

记住这一点,只需将日期转换为dateKey并将dateKeys映射到对象,然后只提取dateKeys的max和min并返回实际日期。

var datesArray = [{
  "source": "2016-11-02",
  "sourcecount": 38
}, {
  "source": "2016-11-10",
  "sourcecount": 30
}, {
  "source": "2016-11-31",
  "sourcecount": 38
}, {
  "source": "2016-01-01",
  "sourcecount": 30
}];

var newObject = {};
var dates = datesArray.map(function(obj) {
  var regEx = new RegExp(/-/g);
  //Convert date to dateKey
  var dateKey = parseInt(obj.source.replace(regEx, ""), 10)
  newObject[dateKey] = obj;
  return dateKey;
});

console.log("Max", newObject[Math.max(...dates)].source);
console.log("Min", newObject[Math.min(...dates)].source);

答案 2 :(得分:1)

好消息是,您的日期已经是ISO 8601格式。你可以简单地做到这一点,

var data = [{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}];

var dateArr = data.map(function(v) {
  return new Date(v.source);
});

// Sort the date
dateArr.sort(function(a, b) {
  return a.getTime() - b.getTime();
  // OR `return a - b`
});

// The highest date is in the very last of array
var highestDate = dateArr[dateArr.length - 1];

// The lowest is in the very first..
var lowestDate = dateArr[0];

或者您更喜欢使用原始对象,然后就可以了,

var data = [{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}];

data.sort(function(a,b) {
  var date1 = (new Date(a.source));
  var date2 = (new Date(b.source));
  return date1 - date2;
});

// highest date is '2016-11-03'
var highestDate = data[data.length - 1].source

// lowest date is '2016-11-01'
var lowestDate = data[0].source

答案 3 :(得分:0)

试试这个

var data = [{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}]
function compare(a,b) {
   if (new Date(a.source) < new Date(b.source))
     return -1;
   if (new Date(a.source) > new Date(b.source))
     return 1;
   return 0;
}
data = data.sort(compare);
var minDate = data[0].source;
var maxDate = data[data.length - 1].source;
相关问题