【问题标题】:Date validation failing日期验证失败
【发布时间】:2013-07-02 08:40:06
【问题描述】:

我希望使用 JavaScript + jQuery 检查一个给定日期是否小于另一个日期。

但是,当检查比给定日期少一天的日期时,条件不满足。

这是我的代码;

$('#payment_date').change(function(){
    payment_date_1      = String($("#payment_date").val());
    s_date_1        = String($("#s_date").text());

    payment_date        = new Date(payment_date_1);
    s_date          = new Date(s_date_1);

    if(payment_date<s_date){
        alert("please enter a correct date");
        $("#payment_date").val("");
    }
});

例如:当 s_date == '2013-07-02'payment_date == '2013-07-01' 时,条件返回 false 而不是 true

我的 HTML:

<span style="display:none;" id="s_date">2013-07-02</span>
<input type="text" value="" name="payment_data_info[payment_date]" id="payment_date" class="hasDatepicker" readonly="readonly">

注意;我检查了两个日期是否有效,两个日期返回有效日期,并且该条件在其他情况下运行良好

我刚刚发现了原因;我正在使用 jQuery 的日期选择器。小于等于 2013-07-10 的日期返回有效日期,小于 2013-07-10 且大于 2013-06-30 的日期返回无效日期。知道为什么吗?

【问题讨论】:

  • 发布您的 html 可能会有所帮助。
  • 不错的日期操作和翻译库momentjs.com

标签: javascript jquery validation date if-statement


【解决方案1】:

首先检查变量声明是否是问题,然后检查字符串解析是否返回您期望的日期。也许 s_date 和 payment_date 毕竟是无效的?

直接比较我也遇到了困难(不知道为什么),所以我使用 valueOf 函数来获取比较值。

【讨论】:

  • +1 你发现她的问题显然没有正确解析日期......在日期上使用比较器应该可以工作;)
【解决方案2】:

当然可以;)

http://jsfiddle.net/4MQkK/

payment_date_1  = "2013-07-01";
s_date_1        = "2013-07-02";

payment_date    = new Date(payment_date_1);
s_date          = new Date(s_date_1);

if(payment_date < s_date){
    alert(payment_date + "is lower than " + s_date);
}

检查您的 payment_date_1 和 s_date_1 的值,其中至少有一个无法正确解析

【讨论】:

    【解决方案3】:

    试试这个,希望对你有帮助。

     $('#payment_date').change(function(){
            var payment_date_1 = $("#payment_date").val(); //add var
            var s_date_1 =  $("#s_date").text();  //add var
    
            var payment_date        = new Date(payment_date_1);
            var s_date          = new Date(s_date_1);
    
            if((payment_date.valueOf())<(s_date.valueOf())){
                alert("please enter a correct date");
                $("#payment_date").val("");
            }
        });
    

    【讨论】:

    • 终于有人明白我的问题了。谢谢,但它仍然返回错误。 :(
    • 嘿,现在 $("#payment_date").val() 正在返回无效日期。知道为什么吗?如何将其转换为正确的日期?
    • 它返回了什么?你能帮我看看这个演示是如何工作的吗?
    • @guitarlass 我认为你正在使用 datepicker。
    • 你有一个更好的选择来检查你何时从 datepicker 中选择日期(我的意思是你点击日期的时间)
    【解决方案4】:

    2 可能的原因:

    1) 其中 Date 被称为具有多个参数的构造函数, 如果值大于它们的逻辑范围(例如,13 作为月份值或 70 作为分钟值),将调整相邻值。例如。 new Date(2013,13,1) 等价于 new Date(2014,1,1), (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)

    您的日期格式是 'dd/MM/yyyy' 但新的 Date () 使用格式 yyyy/dd/mm 所以 2013-06-30: 30 是月份,即比 06/01/2013 多 30 个月 --> 06 /06/2015 您需要更改格式。例如:

    var myDate = "2013/01/30"
    
    var split= myDate .split("/");
    
    new Date (split[2],split[1],split[0]);
    

    2) javascript 中 Date() 中的月份,它们是数字 0-11。所以 01/03/2013 改为 01/04/2013

    int month = myMonth -1; // for example: mymonth = 'March' => month = 2
    can use new Date(2013,month,30);
    

    【讨论】:

      【解决方案5】:

      你可以做这样的事情。

      var payment_date_1      = $("#payment_date").val();
      var s_date_1            = $("#s_date").text(); or $("#s_date").val();
      // IF s_date_1 is a input field then you have to use .val()
      

      用于类型转换String。你可以这样做

      var payment_date_1      = $("#payment_date").val().toString();
      var s_date_1            = $("#s_date").val().toString();
      

      【讨论】:

      • 类型不重要
      【解决方案6】:

      请创建日期对象然后检查

      var first = new Date($("#s_date").text());
      var second = new Date($("#s_date_1").text());
      
      if(first.getTime() < second.getTime()) {
          // code
      }
      

      【讨论】:

      • 我正在检查日期而不是时间。使用 var 没有区别
      • @guitarlass 好的,没问题。请检查。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多