我正在使用jquery autocomplete onselect它在不同的文本字段中显示数据。我使用#dob
函数
#anniversery
和format_date()
中显示格式化日期
select: function(event, ui) {
$("#customerId").val(ui.item.id);
$("#customerName").val(ui.item.value);
var datefield = new Date(ui.item.dob);
$("#dob").val(format_date(datefield));
var datefield1 = new Date(ui.item.anni);
$("#anniversery").val(format_date(datefield1));
$("#address").val(ui.item.address);
$("#mobNo").val(ui.item.mobno);
},
});
function format_date(dt) {
alert(dt);
var dd = dt.getDate();
var mm = dt.getMonth() + 1; //January is 0!
var yyyy = dt.getFullYear();
if (dd < 10) {
dd = '0' + dd;
}
if (mm < 10) {
mm = '0' + mm;
}
dt = mm + '/' + dd + '/' + yyyy;
return dt;
}
});
如果ui.item.dob
和ui.item.anni
不为空,则上面的代码工作正常。
如果为null,则显示NaN/NaN/NaN
如果日期值为空,则不应在文本框中显示任何内容。
alert(dt)
打印Invalide date。
如何解决此问题。
答案 0 :(得分:2)
您可以通过选中NaN
的其中一个属性来检查日期实例是否为无效日期:
function format_date(dt) {
if (isNaN(dt.getFullYear())) return "";
// ...
}
答案 1 :(得分:0)
在您的函数中,使用isNaN函数检查Date对象是否为okey。此外,还有一种更简单的方法可以根据需要形成日期,而不是所有的ifs:
function format_date(dt) {
if(isNaN(dt.getTime()) return "";
return dt.getFullYear + '/' + String('00' + (dt.getMonth() + 1)).slice(-2) + '-' + String('00' + dt.getDate()).slice(-2);
}
另外要知道的是,初始化像var datefield = new Date(ui.item.dob);
这样的Date对象的浏览器支持有点差(
更安全的方法是初始化Date对象而不使用任何比例var datefield = new Date();
,并使用Date set*()
函数来设置时间。更多代码,但如果您需要它在旧浏览器中工作......
示例强>
var inDateTime = '2014-07-26 17:52:00',
inDateTimeSplit = inDateTime.split(' '),
inDateParts = inDateTimeSplit[0].split('-'),
inTimeParts = inDateTimeSplit[1].split(':'),
outDate = new Date;
outDate.setFullYear(parseInt(inDateParts[0], 10));
outDate.setMonth((parseInt(inDateParts[1], 10) - 1));
outDate.setDate(parseInt(inDateParts[2], 10));
outDate.setHours(parseInt(inTimeParts[0], 10));
outDate.setMinutes(parseInt(inTimeParts[1], 10));
outDate.setSeconds(parseInt(inTimeParts[2], 10));
outDate.setMilliseconds(0);
console.log(outDate);