首页 > 解决方案 > 制表单元格日期时间对象 - 需要格式化

问题描述

我正在尝试在包含 TZ UTC 数据的单元格中重新格式化日期时间值。示例值为:2019-12-09T14:50:47.000Z-0500

我需要它显示为:MM/DD/YYYY HH:mm:ssXM - 例如:12/09/2019 02:50:47PM

当然是当地时间。

我试过阅读 moment.js 文档但没有成功。这是我尝试过的一个片段。该表显示为“空白行”。如果我删除格式,数据会正确显示,但不是我想要的日期和时间格式。

{title:"Last Submitted", field:"createdOn", sorter:"date", formatter:"datetime", formatterParams:{inputFormat:"YYYY-MM-DD hh:mm:ss", outputFormat:"MM/DD/YYYY", invalidPlaceholder:"(Invalid date)"}},

任何帮助将不胜感激!

根据 2019 年 12 月 26 日的回答进行更新

再次感谢您的回复。但是,这对于 Tabulator 的作者来说可能是一个问题,因为我将 inputFormat 和 outputFormat 逐字复制到 Tabulator 组件的列定义中,并且它显示空白行。如果我删除列单元格格式化程序(它是 moment.js 代码的包装器),列表将显示完整的时间戳(包括 UTC / zulu 时间)。

例如: 2019-12-09T12:50:47.000Z-0500

预期结果(此时 24 小时或 12 小时格式都无关紧要 - 我确实尝试删除 AM/PM 指示器的“A”)

不幸的是,我无法上传该项目的代码,因为它对 JSON 结果进行内部 WS 调用(这是另一个问题 - 远程分页似乎不起作用。)

以下是专栏的源代码:

{title:"Last Submitted", field:"createdOn", sorter:"date", formatter:"datetime", formatterParams:{inputFormat:"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]Z", outputFormat:"MM/DD/YYYY HH:mm:ssA",invalidPlaceholder:"(Invalid date)"}},

如上所述,如果我添加格式化程序,则会出现空白,仅此而已。如果我删除格式化程序,所有数据都会显示,包括未格式化的日期(它的格式化方式是我和我的用户想要的)。

任何想法将不胜感激!

带有日期时间格式化程序的结果图像

标签: momentjstabulator

解决方案


momentjs如果您知道输入字符串的格式,您可以解析日期:

moment(inDate, inFormat);

例如:

moment('12-25-1995', 'MM-DD-YYYY');

在您的情况下,输入字符串的格式是YYYY-MM-DD[T]HH:mm:ss.SSS[Z]Z- 方括号用作转义字符。

moment您可以使用以下方法从对象中获取格式化字符串.format

moment().format(outFormat);

例如:

moment().format('MM-DD-YYYY');

在您的情况下,输出字符串的格式是- 您可以在文档MM/DD/YYYY HH:mm:ssA中阅读更多内容

您可以在下面的代码段中看到解析和格式化如何协同工作:

let inDate = '2019-12-09T14:50:47.000Z-0500',
    inFormat = 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]Z',
    outFormat = 'MM/DD/YYYY HH:mm:ssA',
    outDate = moment(inDate, inFormat).format(outFormat);

console.log(`In Date: ${inDate}`);
console.log(`Out Date: ${outDate}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>


推荐阅读