0

我想比较日期字符串

if (user_date < date)

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

不幸的是,user_date是用户输入的,所以它可能是无效的。如果它无效(或留空),我希望 (user_date < date) 始终为真。

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

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

我需要它

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

所以它无需任何额外if then的 .

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

4

4 回答 4

1

为什么不将您的最小值设置为 0000-01-01 并将最大值设置为 9999-12-31 ?

于 2013-03-12T11:16:12.137 回答
1

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

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

ps 美元符号是怎么回事?您是否将 Javascript 与 PHP 或 Perl 混淆了?:)

于 2013-03-12T11:32:57.767 回答
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')
    }

}

演示:小提琴

于 2013-03-12T12:14:43.243 回答
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() 方法对任何精度进行任何类型的大于/小于比较。

希望这可以帮助。

于 2013-03-12T16:01:06.323 回答