日期验证失败

时间:2013-07-02 08:40:06

标签: javascript jquery validation date if-statement

我希望使用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将返回无效日期。知道为什么吗?

6 个答案:

答案 0 :(得分:1)

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

我通过直接比较(不知道为什么)也遇到了困难,所以我使用valueOf-function获取值进行比较。

答案 1 :(得分:0)

当然有效;)

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的值,其中至少有一个无法正确解析

答案 2 :(得分:0)

试试这个,我希望它会有所帮助。

 $('#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("");
        }
    });

答案 3 :(得分:0)

2可能的原因:

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

您的日期格式为'dd / MM / yyyy',但新的日期()使用格式为yyyy / dd / mm所以2013-06-30:30是月份,即30个月,然后是06/01/2013 - &gt; 2015年6月6日 你需要改变格式。例如:

var myDate = "2013/01/30"

var split= myDate .split("/");

new Date (split[2],split[1],split[0]);

2)月份()在javascript中的数字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);

答案 4 :(得分:-1)

PLease创建日期对象,然后检查

var first = new Date($("#s_date").text());
var second = new Date($("#s_date_1").text());

if(first.getTime() < second.getTime()) {
    // code
}

答案 5 :(得分:-1)

你可以这样做。

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();