从日期数组中返回最新日期

Return the latest date from array of dates

本文关键字:日期 最新 返回 数组      更新时间:2023-09-26

我有如下json:

  "reviews":[
    {
    "notes": "Great place, perfect location but the best part was the Staff. Thank you so much for making our trip so wonderful!",
    "date": "2015-04-18",
    "rating":{"overall": 100}
    },
    {
    "notes": "I messed up the days I was supposed to be there but they did everything they could to get me a room, which I did. The guy at the front was super nice and then drew me an entire map based off of how much time I had there in Rome. It was extremely helpful and the restaurant he recommends (a friends who you get 10% off of) had good lasagna. Great place for a really reasonable price. Also, the doors do not automatically lock for you room, so just remember to lock your door when you leave. ",
    "date": "2016-04-18",
    "rating":{"overall": 94}
    }
    ]

我正在尝试获取最新日期(最新日期),以便我可以打印相关的"注释"。

      function highestReview() {
        var maxNumb = [];
        for(var y = 0; y < data.reviews.length; y++){
          maxNumb.push(data.reviews[y].date);
        }
       var latestDate = new Date(Math.max.apply(null, maxNumb));
        console.log(latestDate);
      }
      highestReview();

我收到"无效日期"

根据文档如果至少一个参数无法转换为number,则结果为 NaN 并且new Date(NaN)将被Invalid Date

推送数组时将日期字符串包装在new Date中。当DateObject通过Number传递时,将返回表示date的数值。

var data = {
  "reviews": [{
    "notes": "Great place, perfect location but the best part was the Staff. Thank you so much for making our trip so wonderful!",
    "date": "2015-04-18",
    "rating": {
      "overall": 100
    }
  }, {
    "notes": "I messed up the days I was supposed to be there but they did everything they could to get me a room, which I did. The guy at the front was super nice and then drew me an entire map based off of how much time I had there in Rome. It was extremely helpful and the restaurant he recommends (a friends who you get 10% off of) had good lasagna. Great place for a really reasonable price. Also, the doors do not automatically lock for you room, so just remember to lock your door when you leave. ",
    "date": "2016-04-18",
    "rating": {
      "overall": 94
    }
  }]
};
function highestReview() {
  var maxNumb = [];
  for (var y = 0; y < data.reviews.length; y++) {
    maxNumb.push(new Date(data.reviews[y].date));
  }
  var latestDate = new Date(Math.max.apply(null, maxNumb));
  console.log(latestDate);
}
highestReview();

您可以使用

Array#reduce并将日期作为字符串进行比较,而它是一个 ISO 日期。

var data = { "reviews": [{ "notes": "Great place, perfect location but the best part was the Staff. Thank you so much for making our trip so wonderful!", "date": "2015-04-18", "rating": { "overall": 100 } }, { "notes": "I messed up the days I was supposed to be there but they did everything they could to get me a room, which I did. The guy at the front was super nice and then drew me an entire map based off of how much time I had there in Rome. It was extremely helpful and the restaurant he recommends (a friends who you get 10% off of) had good lasagna. Great place for a really reasonable price. Also, the doors do not automatically lock for you room, so just remember to lock your door when you leave. ", "date": "2016-04-18", "rating": { "overall": 94 } }] },
    latestDate = data.reviews.reduce(function (r, a, i) {
        return !i || a.date > r ? a.date : r;
    }, undefined);
    
document.write('<pre>' + JSON.stringify(latestDate, 0, 4) + '</pre>');

必须先将日期值转换为 Date 对象:

function highestReview() {
        var maxNumb = [];
        for(var y = 0; y < data.reviews.length; y++){
          maxNumb.push(new Date(data.reviews[y].date));
        }
       var latestDate = new Date(Math.max.apply(null, maxNumb));
        console.log(latestDate);
      }
      highestReview();

希望对你有帮助