Arrays 返回列表中最后一项而不是最新日期的日期排序

Arrays 返回列表中最后一项而不是最新日期的日期排序,arrays,date,google-apps-script,Arrays,Date,Google Apps Script,问题:日期排序未返回最大值 所需输出:返回数组中的最大/最新日期 我有谷歌应用程序脚本下面的功能。 我正在传递日期,并试图获得最大的日期。 它进行排序,但返回列表中的最后一项,而不是最新日期。有什么帮助吗 (dcmDates从工作表中提取并格式化为日期。) lastDate=dcmDates.sort(函数(a,b){ if(isNaN(a)){return-1;} 如果(新日期(a)>新日期(b)){返回1;} 如果(新日期(a)您正在按升序排序日期,并从结果中获取第0项。此外,在排序之前,请

问题:日期排序未返回最大值

所需输出:返回数组中的最大/最新日期

我有谷歌应用程序脚本下面的功能。 我正在传递日期,并试图获得最大的日期。 它进行排序,但返回列表中的最后一项,而不是最新日期。有什么帮助吗

(dcmDates从工作表中提取并格式化为日期。)

lastDate=dcmDates.sort(函数(a,b){
if(isNaN(a)){return-1;}
如果(新日期(a)>新日期(b)){返回1;}

如果(新日期(a)您正在按升序排序日期,并从结果中获取第0项。此外,在排序之前,请检查日期的格式是否正确。Console.log并验证输出。

我能够重新创建您的问题,但它无法使用您的条件对数组进行正确排序。我尝试稍微修改您的函数并简化了脚本,使您在需要时可以更轻松地调整脚本:

  lastDate = dcmDates.sort(function(a, b) {
    return new Date(b) - new Date(a);
  })[0]; 
要轻松访问最长日期,您需要做的是反转要减去的日期。这样,最长日期将始终放在第一个索引中

对于可能的NaN单元格,我没有在这里包括它,但是您可以在返回之前添加NaN检查。上面的代码假设单元格中只有日期值

编辑:

如果要从比较/排序中排除非日期数据,则需要在排序之前先筛选dcmdate

var dcmDates = values.filter(date => !(isNaN(new Date(date).getTime())));

这很简单,但您只想在排序之前包含有效日期。这并不完全符合您的要求,比如将NaN值放在排序的底部,但其输出将是相同的,即获得有效的最新日期。

感谢您的关注。我检查了格式。那里应该有两个函数,第一个将NaN从下到下取消优先级。不确定这是否也会捕获一个日期。我的目的是对降序日期进行排序(然后在底部显示text/NaN)。然后抓住第一项。你能推荐一个调整来解决这个问题吗?谢谢。NaN/非日期检查非常关键。你能提供建议吗?我很难理解如何将它们排序到底。而且,如果a和b是日期,为什么我必须再次将它们设为日期。如果a或b不是日期,这不会引发错误吗?看起来很奇怪或者文本/非数字项就这么好。谢谢。我想我只是把它太复杂了…嗨@JasonTorpy,你能试着给我一些可能不被认为是该列日期的特定值吗?我会尝试复制这些值,并会给你更新的答案。如果可能的话,一种可能的非日期值因此,我们不会遇到意外的结果。这些结果包括空格、特殊字符、非标准格式日期、具有不同格式的日期等。它可能不像其他示例那样重要,但如果我们也采取措施防止不必要的失败,也不会造成伤害。实际上,如果发现从排序arr中删除非日期更容易是的。我理解你所说的“非约会”可能是什么意思。先排除然后排序似乎更有意义。你所拥有的现在正为我工作。谢谢!
var dcmDates = values.filter(date => !(isNaN(new Date(date).getTime())));