angular slickgrid 日期格式更改仅在网格中显示

angular slickgrid date format change only display in grid

  this.columnDefinitions = [
          {
            id: 'edit',
            field: 'id',
            excludeFromColumnPicker: true,
            excludeFromGridMenu: true,
            excludeFromHeaderMenu: true,
            formatter: Formatters.editIcon,
            minWidth: 30,
            maxWidth: 30,
            onCellClick: (e: Event, args: OnEventArgs) => {
              this.router.navigate(['/transaction/transaction-detail/' + args.dataContext.id]);
            }
          },
         
      { id: 'cin', field: 'customer.cin', name: 'CIN', filterable: true, sortable: true, formatter: Formatters.complexObject },
      { id: 'branch', field: 'branch.name', name: 'Branch', filterable: true, sortable: true, formatter: Formatters.complexObject },
      { id: 'valueDate', field: 'valueDate', name: 'Transaction Date ',  dateFormat: 'DD-MM-YYYY'},
      { id: 'amount', field: 'amount', name: 'Amount', sortable: true, maxWidth: 200, type: FieldType.number, filter: { model: Filters.inputNumber }  },  
  ];
<div class="card-body">
    <div class="form-group row" id="grid-container">
        <angular-slickgrid gridId="transactionGrid" [columnDefinitions]="columnDefinitions"
                                [gridOptions]="gridOptions" [dataset]="dataset"
                                (onAngularGridCreated)="angularGridReady($event)">
        </angular-slickgrid>
    </div>
</div>

我需要将日期格式更改为 DD-MM-YYYY 或 DD/MM/YYYY(删除时间)

如何在 angular slickgrid

中做到这一点

现在显示如下...日期以日期格式出现..我们可以使用管道将日期转换为字符串吗

在 angular 中操作数据的最好和最简单的方法是通过管道。


@Pipe({
  name: 'dateAgo',
  pure: true
})
export class DateAgoPipe implements PipeTransform {

  transform(value: any, args?: any): any {
    if (value) {
      const seconds = Math.floor((+new Date() - +new Date(value)) / 1000);
      if (seconds < 29) // less than 30 seconds ago will show as 'Just now'
          return 'Just now';
      const intervals = {
          'year': 31536000,
          'month': 2592000,
          'week': 604800,
          'day': 86400,
          'hour': 3600,
          'minute': 60,
          'second': 1
      };
      let counter;
      for (const i in intervals) {
          counter = Math.floor(seconds / intervals[i]);
          if (counter > 0)
              if (counter === 1) {
                  return counter + ' ' + i + ''; // singular (1 day ago)
              } else {
                  return counter + ' ' + i + 's'; // plural (2 days ago)
              }
      }
  }
    return value;
  }

}

并在html中使用它:

{{conversation.createdAt | dateAgo}}

您也可以对 js 和 angular

使用正则表达式
  formatDate(date: string): string {
    return (new Date(date)).toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/, '--');
  }

您可能对 Angular-Slickgrid 和 SlickGrid 一般不熟悉,我只是这么说是因为没有 dateFormat 属性(我很惊讶 TypeScript 没有警告你),但是 formatter 确实存在,所以答案很简单,你只需要使用适当的格式化程序。有一些内置的格式化程序,如果找不到您想要的确切格式,您也可以选择创建自己的自定义格式化程序。

我强烈建议您浏览所有 Wiki,例如 Formatters - Wiki 会通过查看所有内置格式化程序的列表来给您答案,并且还有一个部分向您展示如何在需要时创建自定义格式化程序。

在你的情况下,我认为你可以通过做两件事来实现你想要的格式,首先调用 Formatters.dateEuro 这会给你这种格式 DD/MM/YYYY 如果你想替换 / 通过 - 然后你可以通过使用 formatterOptions 网格选项

来实现
this.columnDefinitions: Column[] = [
   // ...
   { id: 'valueDate', field: 'valueDate', name: 'Transaction Date ',  formatter: Formatters.dateEuro },
];

this.gridOptions: GridOption = {
    // you can customize the date separator through "formatterOptions"
    formatterOptions: {
      // What separator to use to display a Date, for example using "." it could be "2002.01.01"
      dateSeparator: '-', // can be any of '/' | '-' | '.' | ' ' | ''
    }
};

我想再次强调所有 Wikis,我花了很多时间写它们来回答大多数问题,包括你的问题。另请注意,Angular-Slickgrid 是 jQuery 库之上的包装器,因此 Angular 管道无法解决您的问题。