如果Date为空,则format_date()返回NaN / NaN / NaN而不是值

时间:2014-07-26 15:41:02

标签: javascript jquery

我正在使用jquery autocomplete onselect它在不同的文本字段中显示数据。我使用#dob函数

#anniverseryformat_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.dobui.item.anni不为空,则上面的代码工作正常。 如果为null,则显示NaN/NaN/NaN 如果日期值为空,则不应在文本框中显示任何内容。

alert(dt)打印Invalide date。

如何解决此问题。

2 个答案:

答案 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*()函数来设置时间。更多代码,但如果您需要它在旧浏览器中工作......

示例

http://jsfiddle.net/HMb68/

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);