-1

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

4

6 回答 6

1

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

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

于 2013-07-02T08:44:02.047 回答
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("");
        }
    });
于 2013-07-02T08:55:19.007 回答
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 至少其中一个无法正确解析

于 2013-07-02T08:49:28.650 回答
0

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 是月份,即 30 个月,然后 06/01/2013 --> 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);
于 2013-10-28T11:21:56.127 回答
-1

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

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

if(first.getTime() < second.getTime()) {
    // code
}
于 2013-07-02T08:41:48.083 回答
-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();
于 2013-07-02T08:45:28.940 回答