【问题标题】:Find the oldest date in a list of dates在日期列表中查找最早的日期
【发布时间】:2012-08-18 11:24:45
【问题描述】:

在想出 JavaScript 函数时,我需要帮助。该函数应该能够以yyyy-mm-dd hh:mm:ss 格式从日期列表中找到最旧的日期。因此,该函数将接收一个文本,并在这些行中找到最旧的日期条目并选择与该日期关联的文本。

此外,如果有可以解决这个问题的 Java 解决方案,我将使用一些东西将 Java 包含在 JavaScript 中。

【问题讨论】:

  • 你试过什么?你有错误吗?发布一些代码会有所帮助。
  • 你不能(轻易地)在 JavaScript 中包含 Java。你会用什么“东西”?
  • javascript不行,需要jquery
  • @webarto 如果你不能在 JavaScript 中做到这一点,那么根据定义你也不能在 jQuery 中做到这一点,因为 jQuery 只是一个摇摆不定、JavaScripty-wipty 的大球......东西。
  • @Kolink 这很可能是我读过的对 jQuery 的最佳描述。

标签: javascript date


【解决方案1】:

你会怎么做...

  1. 以数组的形式迭代日期,将它们转换为 Unix 纪元。
  2. 使用Math.min.apply(Math, arrayOfDates) 或更好的Math.min(...arrayOfDates) 查找最旧的。

【讨论】:

    【解决方案2】:

    使用 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
    

    【讨论】:

      【解决方案3】:

      您可以将所有日期字符串转换为Date 对象,然后对列表numerically 进行排序并获得第一项。或者,如果您不需要排序列表,您可以在其上应用 Math.min 以获得最低值。

      var minDate = Math.min.apply(null, datestrings.map(Date));
      

      或者,因为您的格式确实有前导零,所以一个简单的string sort 也会这样做。要仅搜索最小字符串,您可以使用:

      var min = datestrings.reduce(function(min, cur) {
          return cur < min ? cur : min;
      });
      

      【讨论】:

      • 除非 OP 还想要第二旧的等,否则排序是多余的。排序至少是 O(n log n),而扫描是 O(n)
      • 没错,我已经用搜索代码扩展了答案。 datestrings.sort()[0] 写起来最短:-)
      • 我认为Array.prototype.reduce 对 JS 来说是相当新的,sort 会返回它是否成功,所以取消引用它不起作用;)
      【解决方案4】:

      这可行,假设 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
      

      【讨论】:

      • @webarto 我在原始 JS 中做得非常好,我为什么要这么做?
      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 2019-06-21
      相关资源
      最近更新 更多