【问题标题】:Tabulator Cell datetime object - Need to Format制表单元格日期时间对象 - 需要格式化
【发布时间】:2020-04-16 04:37:06
【问题描述】:

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

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

当然是当地时间。

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

{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

预期结果(此时 24h 或 12h 格式都无关紧要 - 我确实尝试删除 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)"}},

如上所述,如果我添加格式化程序,则会出现空白 table 并且没有其他内容。如果我删除格式化程序,所有数据都会显示,包括未格式化的日期(它的格式是我和我的用户都想要的)。

任何想法将不胜感激!

Image of Result with datetime formatter

【问题讨论】:

    标签: momentjs tabulator


    【解决方案1】:

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

    moment(inDate, inFormat);
    

    例如:

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

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

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

    moment().format(outFormat);
    

    例如:

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

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

    您可以在下面的 sn-p 中看到解析和格式化如何协同工作:

    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>

    【讨论】:

    • 感谢您的回答。所以 Moment.js 不会将小时部分从 24 小时格式转换为带 AM/PM 的标准?结果显示下午 14:50:47(下午是正确的)。我希望得到这样的结果:12/09/2019 02:50:47PM
    • 随便outFormat = 'MM/DD/YYYY hh:mm:ssA'
    猜你喜欢
    • 2020-11-21
    • 2012-07-23
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多