我正在使用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(并且必须保持这样)。
我做错了什么?
答案 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。
尝试在客户端或服务器端正确格式化日期。