如何找到最早的一组日期。目前我有以下代码可以正常工作:
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。
答案 0 :(得分:12)
我发现_ {min在moment
个实例上是可靠的。以下作品:
var dates = _.map([date1,date2],function(date){return moment(date)});
var start = _.min(dates);
没关系。
答案 1 :(得分: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 :(得分:3)
var earliest = new Date(Math.min.apply(null, dates))
请参阅mdn Function.apply
Math.min(arg1,arg2,...argN)
找到N个数字参数中最低的。
由于Function.prototype.apply
的工作方式,Math.min.apply
有两个参数,a
this
设置,此处似乎不需要,arg
array
。
日期的数字表示是自1970年以来的ms。强制转换为数字的日期将产生此值。新的日期对象初始化为此最低值,这是相同的 日期是最早的日期,但不是同一个对象。
这类似于@ fardjad的方法,但不需要_.min。的underscore.js库,并且通过使用func.apply缩短了,这应该是最新浏览器的常用javascript。
答案 3 :(得分: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
答案 4 :(得分:2)
一个不涉及momentjs的脏oneliner,看起来像这样:
var minDate = new Date(_.min(dates.map(function (date) { return date.getTime(); })));