为什么我的日期输出看起来很怪异?

时间:2013-09-12 08:53:41

标签: jquery sql date

我正在使用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表字段设置为date(并且必须保持这样)。

我做错了什么?

2 个答案:

答案 0 :(得分: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:选项。

答案 1 :(得分:1)

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