ReferenceError:未定义日期

时间:2013-02-27 22:43:09

标签: javascript date

我在这里有一些代码,我从“adate”表示的表单中获取值。然后我将用户在连字符处输入的字符串拆分,并将每个值分为年,月,日,如您所见。我使用这些值来定义日期对象。我的控制台正确显示日期,但我也一直显示此错误。我是否错误地定义了日期?我不确定是什么问题。

function getFormData() {
    var task = document.getElementById("task").value;
    if (checkInputText(task, "Please enter a task")) return;

    var who = document.getElementById("who").value;
    if (checkInputText(who, "Please enter a person to do the task")) return;

    var adate = document.getElementById("dueDate").value;
    var reString = new RegExp("[0-9]{4}\\-\[0-9]{2}\\-\[0-9]{2}");

    if ( adate.match(reString)) {
    processDate(adate) } 

    else {
     alert("you did not enter the date in the correct format")
    };

    var id = (new Date()).getTime();
    var todoItem = new Todo(id, task, who, date);
    todos.push(todoItem);
    addTodoToPage(todoItem);
    saveTodoItem(todoItem);

    hideSearchResults();
}    


function processDate(adate) {
     var splitArray = new Array();
     splitArray = adate.split("-");
     var year = splitArray[0];
     var month = splitArray[1] - 1;
     var day = splitArray[2];
     var date = new Date(year, month, day);
     console.log(date);
    }

2 个答案:

答案 0 :(得分:3)

让你的函数返回日期,因为外面看不到date变量:

function processDate(adate) {
    var splitArray = new Array();
    splitArray = adate.split("-");
    var year = splitArray[0];
    var month = splitArray[1] - 1;
    var day = splitArray[2];
    return new Date(year, month, day);
}

然后在调用时指定一个新变量:

var date = processDate(adate);

错误实际上来自以下行,因为您引用了一个不存在的date变量:

var todoItem = new Todo(id, task, who, date);

答案 1 :(得分:2)

只是评论。

RegExp构造函数通常仅在动态生成表达式时才需要。如果你有一个固定的表达式,使用文字更简单(因为你不必引用某些字符)。另外,要测试格式,更合适的方法是test而不是match

如果日期格式为:yyyy-mm-dd,请考虑:

var reString = /^\d{4}-\d\d-\d\d$/; // trim leading and trailing white space?

if (reString.test(adate)) {
  processDate(adate);
}

日期字符串验证应该在processDate函数中,这可能会产生不同的错误,具体取决于格式是否错误或日期是否无效(例如2013-02-29,它将返回2013年的日期)在当前代码中为-03-01。