5

一連の日付の中で最も早い日付を見つけるにはどうすればよいですか。現在、問題なく動作する次のコードがあります。

var dates = [date1,date2]; // list of javascript dates 
var start = moment(new Date(9999, 0, 1))
// I wished this was one line in momentjs + underscorejs
_.forEach(dates, (date) => {
      if (moment(date).isBefore(start)) {
            start = moment(date);
      }
});

もっときちんとした方法があることを望んでいました(1行で)。Underscore (min は日付では機能しません) / momentjs でより単純な関数を使用することをお勧めします。

4

5 に答える 5

13

インスタンスで _.min が信頼できることがわかりましたmoment。以下の作品:

    var dates = _.map([date1,date2],function(date){return moment(date)});
    var start = _.min(dates);    

気にしない。

于 2013-08-23T04:16:22.903 に答える
3

解決策は次のとおりです。

var dates = [
    new Date(2010, 4, 10, 10, 07, 16),
    new Date(2010, 4, 8, 9, 16, 09),
    new Date(2010, 3, 30, 0, 15, 49),
    new Date(2010, 3, 8, 10, 08, 35)
];


var date_sort_asc = function (date1, date2) {

if (date1 > date2) return 1;
if (date1 < date2) return -1;
return 0;
};

var date_sort_desc = function (date1, date2) {

if (date1 > date2) return -1;
if (date1 < date2) return 1;
return 0;
};     

dates.sort(date_sort_asc);

document.write('<p>Dates sorted in ascending order (oldest to newest):</p>');
for (var i = 0; i < dates.length; i++) {
document.write(i + ': ' + dates[i] + '<br>');
}     

dates.sort(date_sort_desc);

document.write('<p>Dates sorted in descending order (newest to oldest):</p>');
for (var i = 0; i < dates.length; i++) {
document.write(i + ': ' + dates[i] + '<br>');

}  

dates[0]ソートされた形式で最初の日付が表示されます。上記を使用して、昇順と降順で並べ替えることもできます。2箇所変更するだけです。

乾杯。

于 2013-08-23T04:13:58.337 に答える
2

momentjs を含まない汚いワンライナーは、次のようになります。

var minDate = new Date(_.min(dates.map(function (date) { return date.getTime(); })));
于 2015-10-29T10:40:33.563 に答える
2

日付をタイムスタンプに変換しgetTime()て比較できます。

// WARNING: Untested code ahead
function getMinDate(dates) {
    var timestamps = dates.map(function (date) { 
        return date.getTime() 
    });
    return new Date(_.min(timestamps));
}

のように使う

getMinDate(yourDatesArray); // returns min date
于 2013-08-23T04:17:37.263 に答える