Flatpickr 和 Moment.js 意外的日期格式

Flatpickr and Moment.js unexpected date format

我正在为 Flatpickr 使用以下实例化代码。

$("#entry_date_time").flatpickr({
    enableTime: true,
    altInput: true,
    defaultDate: moment().format("YYYY-MM-DD HH:MM:SS"),
    dateFormat: "YYYY-MM-DD HH:MM:SS",
    minuteIncrement: 1
});

我遇到的问题是 moment().format("YYYY-MM-DD HH:MM:SS"); 给了我正确的数据,但 $("#entry_date_time").val() 的输出等于

2017201720172017-JanJan-SatSat 0000:JanJan:0000

而不是我提供的预期格式。

任何关于可能导致此问题的想法都很好,感谢您的帮助!

根据输出,并查看 date and time 的 flatpickr 文档,格式中似乎只需要单个字符而不是多个字符?例如,4 Y 表示年份重复 4 次,月份重复 2 次,等等。

您需要的日期格式可能应该是:

dateFormat: "Y-M-D H:i"

...但是,我没有看到 flatpickr 的秒部分的格式化选项?

秒更新:

秒功能有 flatpickr feature request

Flatpickr 有自己的 formating tokens 与 moment 支持的不同。但好处是您可以使用 parseDateformatDate 配置选项来支持自定义格式标记。

/* A custom datestring parser */
parseDate: (date: string, format: string) => Date;

/* Allows using a custom date formatting function instead of the built-in. Generally unnecessary.  */
formatDate: (date: Date, format: string, locale: Locale) => string;

具有 moment.js 兼容令牌的示例 https://jsfiddle.net/armujahid/pwqhznj0/

const fp = flatpickr(".date", {
  altInput: true,
  dateFormat: "YYYY-MM-DD",
  altFormat: "DD-MM-YYYY",
  allowInput: true,
  parseDate: (datestr, format) => {
    return moment(datestr, format, true).toDate();
  },
  formatDate: (date, format, locale) => {
    // locale can also be used
    return moment(date).format(format);
  }
});

参考:我的评论在https://github.com/flatpickr/flatpickr/issues/1549#issuecomment-537939826

更新:此代码段也已添加到 official docs