2013-08-23 12 views
5

日付の中で最も古いものを見つける方法を教えてください。一連のJavaScript日付の中で最も早いものを見つける

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。ここで

答えて

12

_.minはmomentインスタンスでは信頼できます。次の作品:

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

nevermind

+1

瞬間にも方法があります:) http://momentjs.com/docs/#/get-set/min/ –

+0

また、関数を直接渡すこともできます: 'var 'var start = _.min(dates);' –

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つの場所で変更する必要があります。

乾杯。

+1

:)...心配ありません。あなたのために助けてうれしい.. –

2

あなたはgetTime()経由のタイムスタンプに日付を変換し、それらを比較することができます

getMinDate(yourDatesArray); // returns min date 
+0

私はこれが 'var timestamps = $ .map(dates、function(date){ ' – Stumblor

3

var earliest = new Date(Math.min.apply(null, dates))

はMDN Function.apply

Math.min(arg1,arg2,...argN)は最低のを見つけ見るよう

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

は、それを使用しますN数値の引数。

ので Function.prototype.apply作品は、 Math.min.applyは二つの引数を取る方法の

、ここでは不要なように見える this設定、およびargarray

日付の数値表現は1970年以降のmsです。数値に強制された日付はこの値を生成します。新しい日付オブジェクトは、この最も低い値に初期化されます。これは同じオブジェクトではなく、最も早い日付として という日付と同じです。

これは@ fardjadのアプローチと似ていますが、_.min。のunderscore.jsライブラリは不要で、func.applyを使用することで短縮されています。これは、最新のブラウザに共通のjavascriptである必要があります。 momentjsを含まない

2

汚いoneliner、次のようになります。

var minDate = new Date(_.min(dates.map(function (date) { return date.getTime(); }))); 
+0

ほとんど汚れていない:D –

関連する問題