我需要帮助来提出 JavaScript 中的函数。该函数应该能够从这种格式的日期列表中找到最早的日期yyyy-mm-dd hh:mm:ss
。因此,该函数将接收一个文本,并在这些行中找到最旧的日期条目并选择与该日期关联的文本。
此外,如果有可以解决这个问题的 Java 解决方案,我将使用一些东西将 Java 包含在 JavaScript 中。
我需要帮助来提出 JavaScript 中的函数。该函数应该能够从这种格式的日期列表中找到最早的日期yyyy-mm-dd hh:mm:ss
。因此,该函数将接收一个文本,并在这些行中找到最旧的日期条目并选择与该日期关联的文本。
此外,如果有可以解决这个问题的 Java 解决方案,我将使用一些东西将 Java 包含在 JavaScript 中。
这是您将如何做到的...
Math.min.apply(Math, arrayOfDates)
或更好的Math.min(...arrayOfDates)
。这可行,假设datelist
是字符串并且每个日期都在自己的行上:
var oldest = (function() {var o = ":", c, a=datelist.split(/\r?\n/); while(c=a.shift()) o = o < c ? o : c; return o;})();
打破它,它是这样工作的:它基本上是创建一个函数,运行它,然后获取它的返回值。函数是这样的:
var o = ":",
// ":" comes after "9" in the character map, so it will be greater than any date
c, a = datelist.split(/\r?\n/);
// split on newlines, accomodating both \r and `\r\n` options.
while(c = a.shift()) {
// basically loop through each date
o = o < c ? o : c;
// if the current oldest date is older than the one we're looking at, keep the old one
// otherwise the new date is older so should be kept
}
return o;
// return the result
您可以将所有日期字符串转换为Date
对象,然后按数字对列表进行排序并获取第一项。或者Math.min
,如果您不需要排序列表,您可以只应用它以获得最低值。
var minDate = Math.min.apply(null, datestrings.map(Date));
或者,由于您的格式确实有前导零,因此简单的字符串排序也会这样做。要仅搜索最小字符串,您可以使用以下命令:
var min = datestrings.reduce(function(min, cur) {
return cur < min ? cur : min;
});
使用 jquery 的 Wibbly-wobbly $$$y-wollarsy 示例:
$("body").append($("<div>").attr("id", "q")); //some gratuitous jquery
var timelist = "2012-03-03 10:14:21 \r\n 2012-05-15 21:21:12\r\n 2012-07-01 10:19:19\r\n2012-02-11 21:21:12";
var datelist = timelist.split("\r\n");
var oldest = ":";
$.each(datelist, function (a) {
var trimmedThis = $.trim(this);
if (trimmedThis < latest) oldest = trimmedThis;
});
$("#q").text(oldest); //just to beef up the $ count