140

日付の配列から最小日付と最大日付を見つけるにはどうすればよいですか? 現在、次のような配列を作成しています。

var dates = [];
dates.push(new Date("2011/06/25"))
dates.push(new Date("2011/06/26"))
dates.push(new Date("2011/06/27"))
dates.push(new Date("2011/06/28"))

これを行うための組み込み関数はありますか、それとも自分で作成する必要がありますか?

4

12 に答える 12

165

コードは IE、FF、Chrome でテストされ、適切に動作します。

var dates=[];
dates.push(new Date("2011/06/25"))
dates.push(new Date("2011/06/26"))
dates.push(new Date("2011/06/27"))
dates.push(new Date("2011/06/28"))
var maxDate=new Date(Math.max.apply(null,dates));
var minDate=new Date(Math.min.apply(null,dates));
于 2011-08-22T05:46:29.300 に答える
106

何かのようなもの:

var min = dates.reduce(function (a, b) { return a < b ? a : b; }); 
var max = dates.reduce(function (a, b) { return a > b ? a : b; });

Chrome 15.0.854.0 dev でテスト済み

于 2011-08-22T05:18:26.793 に答える
42

_.min_.max日付の配列で作業します。Lodash または Underscore を使用している場合はそれらを使用し、まだ使用していない場合は Lodash (これらのような多くのユーティリティ関数を提供します) の使用を検討してください。

例えば、

_.min([
    new Date('2015-05-08T00:07:19Z'),
    new Date('2015-04-08T00:07:19Z'),
    new Date('2015-06-08T00:07:19Z')
])

配列の 2 番目の日付が返されます (最初の日付であるため)。

于 2015-04-11T13:28:53.383 に答える
15

日付は UNIX エポック (数値) に変換されるため、Math.max/min を使用してそれらを見つけることができます。

var maxDate = Math.max.apply(null, dates)
// convert back to date object
maxDate = new Date(maxDate)

(Chrome のみでテスト済みですが、ほとんどのブラウザーで動作するはずです)

于 2011-08-22T05:23:16.350 に答える
9

ワンライナー:

var min= dates.sort((a,b)=>a-b)[0], max= dates.slice(-1)[0];

変数minmax、複雑さO(nlogn) 、ここで編集可能な例になります。配列に日付のない値 ( などnull) がある場合は、最初に でクリーンアップしdates=dates.filter(d=> d instanceof Date);ます。

var dates = [];
dates.push(new Date("2011-06-25")); // I change "/" to "-" in "2011/06/25"
dates.push(new Date("2011-06-26")); // because conosle log write dates 
dates.push(new Date("2011-06-27")); // using "-".
dates.push(new Date("2011-06-28"));

var min= dates.sort((a,b)=>a-b)[0], max= dates.slice(-1)[0];

console.log({min,max});

于 2018-12-06T14:34:55.690 に答える
3
var max_date = dates.sort(function(d1, d2){
    return d2-d1;
})[0];
于 2011-08-22T05:18:11.310 に答える
1

配列の文字列日付から文字列型で最大または最小日付を取得する場合は、これを試すことができます:

const dates = ["2021-02-05", "2021-05-20", "2021-01-02"]
const min = dates.reduce((acc,date)=>{return acc&&new Date(acc)<new Date(date)?acc:date},'')
const max = dates.reduce((acc,date)=>{return acc&&new Date(acc)>new Date(date)?acc:date},'')
于 2021-07-27T12:06:58.867 に答える
1

上記の回答は、これを修正するために空白/未定義の値を処理しません。以下のコードを使用し、空白を NA に置き換えました。

function getMax(dateArray, filler) {
      filler= filler?filler:"";
      if (!dateArray.length) {
        return filler;
      }
      var max = "";
      dateArray.forEach(function(date) {
        if (date) {
          var d = new Date(date);
          if (max && d.valueOf()>max.valueOf()) {
            max = d;
          } else if (!max) {
            max = d;
          }
        }
      });
      return max;
    };
console.log(getMax([],"NA"));
console.log(getMax(datesArray,"NA"));
console.log(getMax(datesArray));

function getMin(dateArray, filler) {
 filler = filler ? filler : "";
  if (!dateArray.length) {
    return filler;
  }
  var min = "";
  dateArray.forEach(function(date) {
    if (date) {
      var d = new Date(date);
      if (min && d.valueOf() < min.valueOf()) {
        min = d;
      } else if (!min) {
        min = d;
      }
    }
  });
  return min;
}

console.log(getMin([], "NA"));
console.log(getMin(datesArray, "NA"));
console.log(getMin(datesArray));

ここにプレーンな JavaScriptデモを追加し、この codepen で AngularJS のフィルターとして使用しました。

于 2017-12-28T09:52:15.063 に答える