1

我在这里有一些代码,我从“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);
    }
4

2 回答 2

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);
于 2013-02-27T23:01:13.627 回答
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 的日期)。

于 2013-02-28T00:29:47.280 回答