2013-03-12 76 views
0

我要來比較日期字符串小於最小日期的Javascript:那就是總是比任何其他日期

if (user_date < date) 

日期有yyyy-mm-dd格式,因此它是確定日期,比較字符串,如果用戶輸入這種格式的有效user_date

不幸的是,user_date是由用戶輸入的,因此它可能是無效的。如果它無效(或空),我想(user_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';,因爲在不到210年的時間內,algorythm將停止正常工作。

+2

爲什麼不直接使用javascript日期工作,比如'new Date($ userdate)',然後比較日期 – 2013-03-12 11:16:58

+0

你可以先確認日期,然後檢查它是否更大或更大...... – TheBronx 2013-03-12 11:17:44

+0

@ TheBronx:我不想添加額外的驗證。另外2個if/else將複製相同的代碼。 – Haradzieniec 2013-03-12 11:22:31

回答

1

我認爲這是不可能的。但是,有可能獲得比較始終爲假的日期—因此在功能上它的行爲與NaN的行爲相同。所以,如果你反轉測試,因此用!(a > b)代替(a <= b),它會起作用。

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

p.s.美元符號是什麼?你用PHP或Perl混淆Javascript嗎? :)

+0

幾分鐘前跳出PHP。 :)修正! :) 謝謝!!!! – Haradzieniec 2013-03-12 11:36:15

1

爲什麼不把你的最小值設置爲0000-01-01,最大值是9999-12-31?

+0

我同意0000-01-01。那9999-12-31怎麼樣,那天會通過一天。 – Haradzieniec 2013-03-12 11:18:19

+0

是的,但會有一個新的日期格式爲此發明,我們將全部退役:) – SteveP 2013-03-12 11:21:58

+0

爲什麼在這種情況下比較'A'更糟?直到'9999-12-31'之前的任何日期都小於'A'。 :)此外,你會看到我的代碼也會在'10000-01-01'上運行! :) – Haradzieniec 2013-03-12 11:24:16

1

我覺得你可以做的事端glike

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

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()方法進行任何比任何精度更大/更小的比較。

希望這會有所幫助。

相關問題