2013-08-23 45 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); 
     } 
}); 

我希望有一個整潔的方式(在一行)。我寧願在Underscore中使用更簡單的函數(min不適用於日期)/ momentjs。

回答

12

我發現_.min在moment實例上可靠。以下作品:

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

從來沒有。

+1

瞬間也有一個最小的方法:) http://momentjs.com/docs/#/get-set/min/ –

+0

請記住,你也可以直接傳遞函數: var date = _.map([date1,date2],moment);' '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]會給你按排序格式的第一次約會。使用上面的,你可以升序和降序排序。只需要在兩個地方進行更改。

乾杯。

+1

:)......無後顧之憂。很高興它的幫助你.. –

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 
+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)找到最低的ñ數字參數。

因爲Function.prototype.apply是如何工作的,Math.min.apply有兩個參數,一 this設置,這似乎在這裏不需要和argarray

日期的數字表示是自1970年以來的毫秒數。被強制爲數字的日期將產生該值。一個新的日期對象被初始化爲這個最低值,這與最早的日期相同,但不是同一個對象。

這與@ fardjad的方法類似,但不需要爲_.min。添加underscore.js庫,並且通過使用func.apply來縮短,這對於最新的瀏覽器應該是通用的JavaScript。

2

髒oneliner,不涉及momentjs,看起來是這樣的:

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

幾乎不髒:D –

相關問題