.net Angular 14按日期对数组中的元素排序

f8rj6qna  于 2023-02-17  发布在  .NET
关注(0)|答案(2)|浏览(161)

在我的Angualar 14项目中,我从数据库中拉取一个数据并将其分配到列表中,我在该数据中有一个createDatetime列,当我将该数据保存到数据库中时,由于我同时保存了20个数据,因此仅在毫秒之间存在差异,因此我无法将其从小到大排序,如何将该数据从小到大排序?

shorted Code ;   const sortedList = this.measurementTable.productionTableDetails.sort((a, b) => {
      const dateA = new Date(a.createDateTime);
      const dateB = new Date(b.createDateTime);
      return Number(dateA) - Number(dateB);
    });   

dateFormat : "2023-02-15T17:00:44.0058977"
y1aodyip

y1aodyip1#

你的标准javascript Date对象精度不低于毫秒,所以你提供的微秒会被修剪,如果你想在js中使用带有微秒的日期,你可能想使用moment.js或luxon.js --也许他们能提供这样的功能,但我没有检查。
但是您的日期格式是符合ISO-8601的(即使它使用微秒而不是毫秒,它在技术上仍然是符合标准的,因为IIRC标准没有提供强制精度,只有指导方针)。
由于ISO-8601将所有单位按降序排序,并且所有值都使用降序,这意味着您可以安全地使用字典顺序进行排序。这意味着您可以简单地对字符串进行排序,它们将正确排序。
如果您只对排序感兴趣,那么您可以简单地执行以下操作:

const sortedList = this.measurementTable.productionTableDetails.sort((a, b) => {
    // Compare the strings using lexicographical sort, i.e. compare strings
    if (a.createDateTime < b.createDateTime) {
        return -1;
    }
    
    if (a.createDateTime > b.createDateTime) {
        return 1;
    }
    
    return 0;
});
kx7yvsdv

kx7yvsdv2#

您需要将Date对象显式转换为数字。请尝试使用getTime()

const sortedList = this.measurementTable.productionTableDetails.sort((a, b) => {
      const dateA = new Date(a.createDateTime).getTime();
      const dateB = new Date(b.createDateTime).getTime();
      return dateA - dateB;
    });

如果对你有用就告诉我

相关问题