【问题标题】:Javascript Date Time Validation - yyyy-mm-dd hh:mmJavascript 日期时间验证 - yyyy-mm-dd hh:mm
【发布时间】:2011-12-21 08:03:17
【问题描述】:

我想创建一个非常简单的 javascript 表单验证。我有两个由日期时间选择器填充的输入框。日期时间选择器以 2011-12-21 09:58 的格式填充输入框。我有一个收集日期和到达日期的输入框。

我想验证输入的“交付日期时间”是否大于“收集日期时间”。

验证失败的输出应该只是在“coolectdate”之前显示“deliverdate”的弹出窗口中。

这可以用 javascript 完成吗?如果可以,有人可以给我一个简短的例子吗?

我的基本html表单代码是:

...
<td>
<input type="text" id="collectdatetime" name="collectdatetime">
</td>
<td>
<input type="text" id="deliverdatetime" name="deliverdatetime" >
</td>
...

提前感谢大家的帮助,祝大家节日快乐。

问候, 瑞恩·史密斯

【问题讨论】:

  • 给定格式,您可以将它们作为字符串进行比较,无需将它们转换为日期对象。
  • 嗨@Rob,你能不能提供一个示例代码,因为我的javascript知识令人震惊。谢谢,瑞恩

标签: javascript validation datetime


【解决方案1】:

鉴于日期/时间字符串的 ISO8601 格式,您可以将值作为字符串进行比较。这是使用 ISO8601 格式的优点之一。您要求交货时间在收货时间之后,这对我来说似乎倒退了,但无论如何......

<form onsubmit="return checkDates(this)">
  <table>
    <tr>
      <td>
        <input type="text" id="collectdatetime" name="collectdatetime">
      <td>
        <input type="text" id="deliverdatetime" name="deliverdatetime">
      <td>
        <input type="submit">
  </table>
</form>

<script>
function checkDates(form) {
  if (form.collectdatetime.value >= form.deliverdatetime.value) {
    alert('Collection time must be after deliver time');
    return false;
  }
}
</script>

【讨论】:

  • 嗨@Rob,谢谢你,按照你的例子完美地工作。但是,我正在努力将其合并到我的页面中。在 之后,我有另一个脚本 found here 在其他字段上执行验证。当我添加您的脚本时,现有的验证脚本有效,但您的日期时间验证被忽略。任何建议,我将在以后添加完整的页面脚本,感谢您的帮助。瑞安
  • 我的表单标签.....
  • ....
【解决方案2】:

你可以这样做:

var collectTime = (new Date(document.getElementById("collectdatetime").value)).getTime(),
    deliverTime = (new Date(document.getElementById("deliverdatetime").value)).getTime();
if(deliverTime > collectTime) {
    //Ok!
}

这会创建 2 个Date 对象,将选定的值传递给构造函数,然后比较时间。 getTime 方法返回一个数字,表示自 1970 年 1 月 1 日 00:00:00 以来经过的时间(以毫秒为单位)。

这是working example

【讨论】:

  • 谢谢@James,我应该将它放在我的代码中的什么位置,以便在我单击提交按钮时执行验证?谢谢,瑞恩
  • 您需要将submit 事件处理程序绑定到表单(或将click 事件绑定到按钮)。在事件处理程序中,您可以运行验证。
  • 谢谢詹姆斯,你能协助完成完整的脚本吗?抱歉,但我不知道任何 Java 脚本。我想我们需要一个 onClick="showAlert();"对于提交按钮,但我如何调用那个确切的脚本?再次感谢,R
  • 谷歌可能是最好的去处。搜索“JavaScript 事件处理程序”或类似的内容并开始阅读它。如果您遇到特定问题,请在此处发布问题,人们会很乐意提供帮助。这样,您更有可能学会并记住它以备下次使用!
【解决方案3】:

您可以根据这些值创建 Date 对象并进行比较:

var collect = new Date($('#collectdatetime').val());
var delivery = new Date($('#deliverdatetime').val());

if (delivery < collect) {
    alert('Delivery date before collect!');
}

【讨论】:

  • 请注意,这只是因为&lt; 触发了对每个日期的.valueOf() 方法的自动调用。
  • 另请注意,问题中没有提及 jQuery,因此 OP 不太可能正在寻找涉及它的解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-10-08
  • 2013-07-06
  • 2018-11-18
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
相关资源
最近更新 更多