【问题标题】:comparing dates using script in forms使用表单中的脚本比较日期
【发布时间】:2013-07-12 12:11:56
【问题描述】:

我正在尝试根据在第一个文本框中输入的日期来验证日期。如果第二个文本框从第一个文本框中输入的日期开始超过一年,那么它应该显示一个警报并将第二个日期字段文本框空白。两个文本框都是只读的,并从日历中获取值。我尝试了以下代码,但即使年份不超过一年,也会弹出警报。另外,是否可以将“name3”和“name4”ID 作为参数传递。我需要将此代码应用于 10 行。

<script>
function fixup()
{
    var parts = document.getElementById('name3').value.split("-");  
    parts[2] = Number(parts[2]) + 1;     
    var pj = parts.join("-");

    var x=document.getElementById('name4').value;
    if(x>pj)
        {
        alert("Expiration date should not be greater than one year from start date");
        document.getElementById('name4').value = "";
        return false;
        }
    return true;
 }



</script>
</head>
<body>
<form onsubmit="return fixup()">
<table>
<tr>
<td><input type="text" name="soname3" id="name3" size="15" readonly="readonly"> 
<img src="../Image/cal.gif" id="" style="cursor: pointer;" onclick="javascript:NewCssCal('name3','MMddyyyy','dropdown',false,'12')" /></td>
 <td><input type="text" name="soname4" id="name4" size="15" readonly="readonly">
 <img src="../Image/cal.gif" id="" style="cursor: pointer;" onclick="javascript:NewCssCal('name4','MMddyyyy','dropdown',false,'12'); " /> </td>
 </tr>
</table>
<input type="submit" value="Submit">
</form>

在 dm03514 的建议下,我做了下面的代码。但验证不起作用..

  function test()
  {
      start = document.getElementById('name3').value;
      end = document.getElementById('name4').value;
      compare(start, end);

  }

  function compare(sDate, eDate)
  {
      function parseDate(input) {
            var parts = input.match(/(\d+)/g);
            return new Date(parts[2], parts[0]-1, parts[1]); //parts[2] is year, parts[0] is month and parts[1] is date.
          }
      var parse_sDate = parseDate(sDate);
  var parse_eDate = parseDate(eDate);
  parse_sDate.setDate(parse_sDate.setFullYear(parse_sDate.getMonth() + 12));
  if(parse_sDate>parse_eDate)
      {
      alert("End date should not be greater than one year from start date");
      }


  }

【问题讨论】:

  • 我认为你应该使用 Date 对象,它们允许你在 javascript 中轻松处理日期
  • 日历中的日期为 MM-dd-yyyy。那么如何使用日期对象来比较日期。请帮忙。
  • 你必须给年加 100。
  • 您似乎使用Date(month, day, year),但您应该使用Date(year,month,day)
  • Date 类接受的格式高度特定于浏览器和机器的区域设置。如果您需要精确控制格式,那么您应该尝试使用库,例如​​moment.js

标签: javascript


【解决方案1】:

我强烈建议使用像 moment.js 这样的库来处理日期。它具有广泛的日期格式化和解析功能以及比较助手:

var d1 = moment(document.getElementById('name3').value, 'YYYY-MM-DD');
var d2 = moment(document.getElementById('name4').value, 'YYYY-MM-DD');

var diff = d2.diff(d1, 'years'); 

if (diff > 0) {
   alert("Expiration date should not be greater than one year from start date");
}

另见:Compare two dates in JS

【讨论】:

  • 我们不能用javascript实现功能吗?
  • moment.js 库和示例代码是javascript,moment.js 处理日期解析和减法。如果您询问是否可以在没有任何外部库的情况下执行此操作,那么可以,Date 对象的构造函数按以下顺序获取参数:年、月、日。不过,这将变得更加困难,因为必须考虑月、日和闰年问题。我的建议是只使用 moment.js 为您处理所有这些。
  • 感谢您的回复凯尔。我编辑了代码以支持日期对象构造(年、月和日)。由于一些限制,我将无法使用moments.js。但是,我从您那里学到了一种新的有效的日期比较方法。让我试试 Javascript。
猜你喜欢
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多