Javascript:总是小于任何其他日期的最小日期

Javascript: the minimum date that is always less than any other date

本文关键字:日期 其他 任何 小于 Javascript      更新时间:2023-09-26

我想比较日期字符串

if (user_date < date)

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

不幸的是,user_date是由用户输入的,所以它可能无效。如果它无效(或为空),我想要(user_date <日期)总是为真。>

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

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

我需要它

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

所以没有任何额外的if then

注:我不想输入var user_date='2222-12-31';,因为算法将在不到210年的时间内停止正常工作。

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

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

注。美元符号是怎么回事?你是否将Javascript与PHP或Perl搞混了?:)

为什么不把最小值设为0000-01-01,最大值设为99999-12-31呢?

我认为你可以这样做

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')
    }
}

演示:小提琴

我个人会首先验证用户输入的日期——不要让它碰运气。

我在这里使用我自己的日期扩展库来处理这种东西:

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()方法对任意精度进行任何类型的大于/小于比较。