0

我正在使用 jquery datepicker 来获取应用了条件的日期。

这是在我的头文件中:

<script>
$(function() {
    $( "#delivery_date" ).datepicker({ 
        dateFormat: "dd-mm-yy",
        minDate : new Date(),
        onSelect: function(str) {

            var lastDate = new Date(),
            nums = str.split("-"),
            userDate = new Date(nums[2], nums[1]-1, nums[0]),
            period = 21;

            lastDate.setDate(lastDate.getDate()+period);

            if (userDate<lastDate) {
                $("#delivery_warning").addClass("show");
            }
            else { $("#delivery_warning").removeClass("show"); }
        }
    });
});
</script>

然后在页面上我有这个来显示选择器:

<input type="text" id="delivery_date" name="delivery_date" required />
<div id="delivery_warning">This date is within 3 weeks from today</div>

但是,当我选择一个日期时,它会以正确的格式显示(例如 12-04-1987),但对于我选择的每个日期,它都会像“0000-00-00”一样进入数据库。

SQL 表字段设置为日期(它必须保持这样)。

我究竟做错了什么?

4

2 回答 2

1

MySQL 期望日期的格式类似于1987-12-04,而不是12-04-1987. 因此,要么更改您的日期选择器以使用:

dateFormat: 'yy-mm-dd'

或更改您的 MySQL 代码以使用STR_TO_DATE()您提供的格式解析日期。

要获取所选日期,请不要使用您的str.split()代码,请使用:

userDate = $(this).datepicker('getDate');

下面介绍了如何以一种格式显示日期,但以不同的格式将其发送到服务器。添加隐藏输入字段:

<input type="hidden" name="delivery_date" id="hidden_delivery_date">

并将原始delivery_date字段更改为:

<input type="text" name="displayed_delivery_date" id="delivery_date">

然后将以下选项添加到您的日期选择器:

altField: "hidden_delivery_date",
altFormat: "yy-mm-dd"

并保留dateFormat:您最初编写的选项。

于 2013-09-12T09:23:58.883 回答
1

如您所见0000-00-00,MySQL 需要格式为 1987-12-04 而不是 12-04-1987。尝试在客户端或服务器端正确格式化您的日期。

于 2013-09-12T09:26:15.793 回答