日期与javascript比较

日期与javascript比较,javascript,Javascript,我有以下表格: <form action = "dt.jsp" METHOD = "GET" ONSUBMIT="return validateForm()"> <table> <tr> <td><input type=date name="fdate"/></td> <td><input type=date name="tdate"/></td> <

我有以下表格:

<form action = "dt.jsp" METHOD = "GET" ONSUBMIT="return validateForm()">
<table>
   <tr>
     <td><input type=date name="fdate"/></td>
     <td><input type=date name="tdate"/></td>
   </tr>
</table>
<input  TYPE = "SUBMIT" VALUE = "Search by date">
</form>
这段代码有什么问题?

只需将日期字符串传递到日期构造函数中,即可解析日期字符串。构造函数期望的日期为。我怀疑它不起作用,因为您正在处理的日期字符串不符合该格式,因此date没有生成有效的date对象,这导致比较函数失败

在处理日期时,这通常非常有用。在这种情况下,它不仅可以使您的应用程序更加灵活,而且更具可读性。矩将允许您选择它将用于解析您提供给它的日期字符串的可接受值。它还提供了许多比较日期的方法,例如

使用这些代码,您的代码可以重写为以下内容:

function validateForm() {
  var acceptedFormats = ["MM-DD-YYYY", "DD-MM", "DD-MM-YYYY"],
    fromDate = moment(document.getElementsByName('fdate')[0].value, acceptedFormats),
    toDate = moment(document.getElementsByName('tdate')[0].value, acceptedFormats);

  if (fromDate.isAfter(toDate)) { // much more readable, it's practically a sentence!
    alert("To Date must be after From Date");
    return false;
  }

  return true;
}

我刚刚注意到的另一点是,即使比较日期过去了,您的代码也总是无法提交表单。当比较失败时,您显式返回false,这将阻止表单提交。但是当测试通过时,您不会返回任何内容,而是隐式返回未定义的内容。当undefined被传递到submit=return validateForm的提交处理程序中时,它将被强制为false,这也会导致表单不提交。

我不知道。是吗?不。。。我问了一个问题……如果你不能解释到底出了什么问题,我们该怎么猜?我们不知道什么是日期,也不知道什么是日期。简而言之,这里没有足够的信息使其成为有效的questiondates.compare是javascript函数,用于从这里比较日期:但在我的情况下它不起作用。。。你能给我建议另一种比较这两个日期的方法吗?你用什么格式输入日期信息?您正在使用的代码只是通过将日期字符串传递到日期构造函数中来解析它们。构造函数期望的日期为。我怀疑它不起作用,因为您正在处理的日期字符串不符合该格式,因此date没有生成有效的date对象,这导致比较函数失败。
function validateForm() {
  var acceptedFormats = ["MM-DD-YYYY", "DD-MM", "DD-MM-YYYY"],
    fromDate = moment(document.getElementsByName('fdate')[0].value, acceptedFormats),
    toDate = moment(document.getElementsByName('tdate')[0].value, acceptedFormats);

  if (fromDate.isAfter(toDate)) { // much more readable, it's practically a sentence!
    alert("To Date must be after From Date");
    return false;
  }

  return true;
}