使用 flatpickr 显示、解析和保存数据库日期的正确方法

Correct way of using flatpickr to display, parse and save dates from/to database

提问人:marcushorndt 提问时间:10/6/2022 最后编辑:marcushorndt 更新时间:4/12/2023 访问量:803

问:

我正在开发一个可以创建事件的 Web 应用程序。 我想用 flatpickr 显示的日期的输入字段。 提交事件和相应的日期可以工作,但是当我尝试使用它来编辑现有日期时,我意识到我遗漏了一些东西。

这是我在创建表单时调用的函数:

function flatpickrInitialization(selector) {
        $(selector).flatpickr({
            dateFormat: "Y-m-d H:m",
            enableTime: true,
            minDate: "today",
            allowInput: true,
            formatDate: (date, time, format) => {
                return flatpickr.formatDate(date, time, format);
            },
            parseDate: (datestr, format) => {
                return flatpickr.formatDate(datestr, format);
            }
        });
    }

用于存储日期的日期格式为:

2022-08-17 12:00:00

该问题表现为输入字段不携带最初保存的数据。它们显示没有值的输入 flatpickr 掩码。 flatpickr 脚本创建的隐藏输入字段包含保存的值。

任何帮助表示赞赏!

JavaScript jQuery 日期时间 FlatPickr

评论


答:

0赞 Crezzur 4/12/2023 #1

您可以在将所选时间发送到数据库之前使用 javascript/jquery 转换它

let myFlatpickr = $(".flatpickr").flatpickr();
myFlatpickr.setDate(new Date());

$(document).on("click", "#load", function() {
  if (myFlatpickr.selectedDates[0] === undefined) return;
  let exportdate = myFlatpickr.selectedDates[0].getTime() / 1000;
  let db_str = databaseDateTime(myFlatpickr.selectedDates[0]);
  $("#result").html(`Timestamp: ${exportdate} <br> DateTime: ${db_str}`);
});

function databaseDateTime(d) {
  if (d != null) {
    d = new Date(d);
    return `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")} ` + String(d.getHours()).padStart(2, "0") + ":" + String(d.getMinutes()).padStart(2, "0") + ":" + String(d.getSeconds()).padStart(2, "0");
  }
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/flatpickr/4.6.13/flatpickr.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/flatpickr/4.6.13/flatpickr.min.js"></script>

<input class="flatpickr" type="text">
<button id="load">GetDate</button>

<div id="result" style="margin-top: 25px"></div>