Javascript:始终小于任何其他日期的最短日期

时间:2013-03-12 11:11:53

标签: javascript string date compare

我想比较日期

的字符串
if (user_date < date)

日期格式为yyyy-mm-dd,因此如果用户以此格式输入有效的user_date,则可以将日期比较为字符串。

不幸的是,用户输入了user_date,因此它可能无效。如果它无效(或留空),我希望(user_date&lt; date)始终为真。

如果用户的日期无效,我发现设置var user_date='';。这是为任何有效日期制作(user_date < date)的好方法吗?

同样的问题是(user_date > date)(超过任何日期)。 我发现设置var user_date='A';

我需要它

if (date1 <= date && date2>= date)
//do something

因此无需任何其他if then即可使用。

P.S。我不想进入var user_date='2222-12-31';,因为algorythm将在不到210年的时间内停止正常运作。

4 个答案:

答案 0 :(得分:1)

为什么不将你的分钟设置为0000-01-01而你的最大值设置为9999-12-31?

答案 1 :(得分:1)

我认为这是不可能的。但是可能的是获得一个比较始终为假的日期 - 所以在功能上它的行为与NaN对数字的行为相同。因此,如果您反转测试,从而将(a <= b)替换为!(a > b),则可以正常工作。

$date = new Date(NaN);
if (!($date1 > $date) && !($date2 < $date))  ...

P.S。美元符号有什么用?您是否在使用PHP或Perl混淆Javascript? :)

答案 2 :(得分:1)

我认为你可以做一些事情

var date = '2013-03-12';
var $date = new Date(date);
function onChange(el){
    var user_date = el.value;
    var udate = new Date(user_date);
    if(isNaN(udate.getTime()) || udate < $date){
        alert('less')
    }

}

演示:Fiddle

答案 3 :(得分:1)

我个人首先会验证用户输入的日期 - 不要遗漏。

我在这里使用我自己的日期扩展库来做这种事情:

DP_DateExtensions

parseFormat()方法可让您轻松验证输入。这样的事情做得很好:

Date.parseFormat(InputString, "YYYY-M-D")

如果输入的字符串与格式匹配,则函数返回有效的JavaScript日期;如果不匹配,则返回null。如果你有一个你想要应用的默认行为,你显然不必根据此发送用户消息 - 但代码本身应该“知道”。

在这种情况下 - 如果您希望无效日期小于另一个已知的良好日期,那么有很多方法可以做到这一点。最简单的是这样的:

InputDate = Date.parseFormat(InputString, "YYYY-M-D");
if ( InputDate || InputDate < GoodDate ) {
     Input Date is Invalid or Falls before good date
} else {
     Input Date is Falls after good date
};

您无需设置“虚假日期”或使用正确的验证和布尔逻辑进行猜测,它将一直有效,直到世界停止旋转(理论上)。

您可以使用库中的compare()方法进行任何比任何精度更大/更小的比较。

希望这有帮助。