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 コンストラクターは、式が動的に生成される場合にのみ必要です。固定式がある場合は、リテラルを使用する方が簡単です (特定の文字を引用する必要がないため)。また、形式をテストするには、より適切な方法testmatch.

日付形式が 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 に答える