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