如何在 AG-Grid 中配置日期渲染格式

Posted

技术标签:

【中文标题】如何在 AG-Grid 中配置日期渲染格式【英文标题】:How to configure date render format in AG-Grid 【发布时间】:2019-03-19 01:37:38 【问题描述】:

如何在 AG-Grid 中设置日期列的呈现格式?当我查看样本时,我会看到 dd/mm/yyyy 格式的日期,但我的日期列总是以相当长的格式显示,类似于“Sat May 12 2012 01:00:00 GMT+0100 (BST)”。我想要一个 YYYY-MM-dd 的默认格式,让用户能够自己配置他们想要的格式。我发现的示例展示了如何使用比较器和类似的东西进行自定义过滤,但默认设置对我来说很好,除了日期的实际呈现方式。

谢谢, 特洛伊

【问题讨论】:

【参考方案1】:

解决此问题的最佳方法是使用格式化程序

https://www.ag-grid.com/javascript-grid-value-getters/

希望对你有帮助

【讨论】:

【参考方案2】:

我为此创建了一个单元格渲染器:

cellRendererFormattedDate = params => 
   var date = $filter("date")(params.value, 'yyyy-MM-dd h:mm:ss a');
   return `<div style="text-align:right;">$date</div>`;

在你的控制器中,确保你已经注入了 $filter。 在你的 columnDefs 中,一定要定义 cellRenderer: cellRendererFormattedDate

【讨论】:

请原谅我对 javascript 的无知,但 $filter 是什么以及如何注入它。那是 react 提供的类吗? 抱歉回复晚了,我没有看到你的问题。 $filter 是一个角度 API。该链接包含有关它的详细信息。 啊,我正在使用 React。我以为我已经在问题中指定了这一点,但看起来不像。【参考方案3】:

虽然单元格渲染器和值格式化程序可以工作,但我会为这样的列使用 valueGetter -

headerName: "Issue Date",
valueGetter: function dateValueGettter(params) 
  var date = $filter("date")(params.getValue("issueDate"), 'yyyy-MM-dd');
  return date;

上面的例子是使用 Angular 日期过滤器。

使用 value getter 的好处是现在可以基于 value getter 返回的值对此类列进行排序和过滤。

【讨论】:

如果我理解正确,这个想法是在从服务器获取的字符串中将其作为字符串返回,这就是显示的内容。我能够修改我的 fetch 以将它们适当地反序列化为日期对象,然后进行排序和过滤工作。我看到的方法的缺点是,在将结果发送到客户端之前,需要在服务器端应用 I18N 或自定义格式。这可能不是一件坏事,但如果它需要知道将数据发送给谁并为每个客户端适当地格式化它,它会使服务器端代码不那么通用。【参考方案4】:

这是针对 Angular2+ 版本的。如果您在应用程序中使用矩库。那么工作就很简单了

在您的 .ts 文件中:

    import * as moment from 'moment';


    headerName: 'End Date',
    field: 'endDateUTC',
    minWidth: 80,
    maxWidth: 100,
    valueFormatter: function (params) 
        return moment(params.value).format('yyyy-MM-dd');
    ,
,

你会得到的输出是:

结束日期: 2019-10-05

还可以为用户配置日期格式:您可以在应用程序的某个位置添加一个下拉列表,并允许他们选择他们的日期样式并使用上面的 valueFormatter 并动态传递函数,其中包含许多可用的日期格式图书馆。

如果您的值是字符串格式:

先转换成Date,然后使用上面的值格式化函数

例子:

  this.firstTaskDate = moment(this.firstTaskDate, 'DD/MM/YY')
                .utc()
                .toDate();

希望这对某些人有所帮助。

【讨论】:

对我来说,这种方式最终会在单元格中显示“无效日期”... :( @TheCuBeMan 那么我认为你的价值是字符串。您必须先将其转换为 Date ,然后使用上述功能 更新了我的答案,供您参考。请检查 我将值作为真正的 Javascript 日期(而不是字符串)获取,因此使用格式化程序进行格式化似乎是最合适的选择。如果 valueGetter 作为字符串传入并且我需要转换为日期对象,则使用 valueGetter 更合适,但这里不是这种情况,如果我要将日期转换为字符串,则过滤和排序将不起作用。

以上是关于如何在 AG-Grid 中配置日期渲染格式的主要内容,如果未能解决你的问题,请参考以下文章

在 AG-Grid 图表上设置标签格式

Ag-grid - 导出的 excel 不会在 IE 中将字符串解析为日期格式

在 ag-grid Excel 导出中,如何使空日期时间类型为空单元格而不是 1900.01.00

ag-grid 日期列 inRange 过滤器 - 如何访问测试函数中的“到”日期?

AG-Grid:如何删除列菜单

如何在 ag-grid 中捕获行悬停事件?