user2084813
user2084813

Reputation: 185

ReferenceError: date is not defined

I have some code here where I get a value from a form represented by "adate". Then I split the string the user enters at the hyphen and separate each value into year, month and day as you can see. I use those values to define a date object. My console correctly displays the date, but I keep getting this error also showing up. Am I defining the date incorrectly? I'm not sure what the issue is.

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

Upvotes: 1

Views: 17758

Answers (2)

RobG
RobG

Reputation: 147393

Just a comment.

The RegExp constructor is usually only required where the expression is dynamically generated. Where you have a fixed expression, it's simpler to use a literal (as you don't have to quote certain characters). Also, to test the format, a more appropriate method is test rather than match.

If the date format is: yyyy-mm-dd, consider:

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

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

The date string validation should be in the processDate function, which might throw different errors depending on whether the format is incorrect or the date is invalid (e.g. 2013-02-29, which will return a date of 2013-03-01 in your current code).

Upvotes: 2

bfavaretto
bfavaretto

Reputation: 71918

Make your function return the date, because the date variable in there is not visible to the outside:

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

Then assign to a new variable when you call it:

var date = processDate(adate);

The error actually originated in the following line, because you were referencing a non-existing date variable:

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

Upvotes: 3

Related Questions