2011-11-21 111 views
45

我有一個ID爲'date_trans'的表單輸入。該日期輸入的格式(這是驗證服務器端)可以是任何的:如何檢查輸入日期是否等於今天的日期?

  • 日/月/年
  • DD-MM-YYYY
  • YYYY-MM-DD
  • YYYY/mm/dd

但是,在發佈表單之前,我想檢查date_trans字段的日期是否等於今天的日期。它確定如果所用的日期是客戶的日期(即它使用js),因爲我也對服務器執行了雙重檢查。

我完全失去了如何做jQuery日期比較或只是普通的舊javascript。如果有幫助,我使用的是jquery datepicker

+0

順便說一句,那些都是你接受一些無聊的日期格式。如果你對接受它們的決定有任何控制權,我會建議重新考慮它們的有用性/必要性。 – Phrogz

+0

他們有什麼不好意思?我們在多個國家運營,並且它們是被接受的格式。我想你認爲每個人都以(荒謬的)美國格式工作? – JonoB

+0

天啊,不!美國格式是令人震驚的,但它不在您的名單中,但很容易被您的第一種情況所困惑。如果你確定所有四個都是必要的,那麼一定要用它們。對我來說,似乎你已經選擇了同時任意放任和任意限制。 *聳聳肩* – Phrogz

回答

-4

你看過嗎datejs? (使用適當的全球化包正確解析dd/mm/yyyy)

只需將日期轉換爲其parse()方法,並與今天的日期進行比較。

7
function sameDay(d1, d2){ 
    return d1.getUTCFullYear() == d2.getUTCFullYear() && 
     d1.getUTCMonth() == d2.getUTCMonth() && 
     d1.getUTCDate() == d2.getUTCDate(); 
} 

if (sameDay(new Date(userString), new Date)){ 
    // ... 
} 

使用UTC *方法確保了兩個等價的天在不同的時區相同的全局一天匹配是相同的。 (如果您直接解析兩個日期,則不需要,但需要考慮的好處。)

+0

你應該提到,這實際上是月份指數而不是月份數字本身,因此需要添加1 –

+0

在大多數情況下,首先檢查平均日期,然後是月份和年份,速度會更快嗎? –

+0

@ xcy7e웃取決於輸入數據,但可能。但是,如果您可以創建一個測試用例,這實際上可以產生任何可衡量的差異,我將非常感動。 – Phrogz

0

Date.js是一個用於操作和格式化日期的便利庫。它可以幫助在這種情況下。

+1

是否有必要使用Date.js只有日期比較? – Exception

+0

不,你不知道。但如果日期格式不同,Date.js便於標準化。 –

136

純JS一個簡單的日期比較應該是足夠了:

// Create date from input value 
var inputDate = new Date("11/21/2011"); 

// Get today's date 
var todaysDate = new Date(); 

// call setHours to take the time out of the comparison 
if(inputDate.setHours(0,0,0,0) == todaysDate.setHours(0,0,0,0)) { 
    // Date equals today's date 
} 

這裏的a working JSFiddle

+1

+1使用'setHours'的小時/分鐘/秒/ ms版本。 – Phrogz

+3

如果日期格式爲「21-11-2011」或「21/11/2011」 – JonoB

+4

,則不起作用如果要重複使用輸入日期,請​​不要忘記克隆輸入日期。 ==>使用newDate(date.valueOf())。setHours(0,0,0,0) –

4

只需使用下面的代碼在你的JavaScript:

if(new Date(hireDate).getTime() > new Date().getTime()) 
{ 
//Date greater than today's date 
} 

更改根據您的requirement.Here條件是一個鏈接,對比​​3210

18

嘗試使用moment.js

moment('dd/mm/yyyy').isSame(Date.now(), 'day'); 

如果需要,您可以用'年,月,分'代替'日'字符串。

55

的完整性,從this solution採取:

你可以使用toDateString:

var today = new Date(); 
var isToday = (today.toDateString() == otherDate.toDateString()); 

沒有圖書館的依賴,而且比尋找更清潔 '調用setHours()' 方法在前面的回答顯示,恕我直言

+0

這很棘手。在角度手錶的情況下,我有newDates [i] = 1476252000000和oldDates [i] === 1476252000000.但是,它們並不相同。 Date.parse(newDates [1])=== Date.parse(oldDates [1]) 返回false。 – Winnemucca

+0

@Winnemucca對於給定的值,我返回「true」。您不必使用Date.parse進行相等性檢查 – User528491

-1
TodayDate = new Date(); 
if (TodayDate > AnotherDate) {} else{} 

< =也有效,儘管使用=,它可能必須匹配毫秒。

+0

如果日期中還有時間,則這不起作用。 –

0

以下解決方案比較時間戳整數除以小時,分鐘,秒,毫秒的值。

var reducedToDay = function(date){return ~~(date.getTime()/(1000*60*60*24));}; 
return reducedToDay(date1) == reducedToDay(date2) 

波浪號truncs除法結果(見this article about integer division

相關問題