2011-11-21 74 views
45

Tôi có thông tin nhập biểu mẫu có id là 'date_trans'. Định dạng cho rằng ngày đầu vào (được xác nhận phía máy chủ) có thể là bất kỳ:Làm cách nào để kiểm tra xem ngày nhập liệu có bằng ngày hôm nay không?

  • dd/mm/yyyy
  • dd-mm-yyyy
  • yyyy-mm-dd
  • yyyy/mm/dd

Tuy nhiên, trước khi đăng biểu mẫu, tôi muốn kiểm tra xem trường date_trans có ngày bằng ngày hôm nay hay không. Ok của nó nếu ngày lấy là ngày của khách hàng (tức là nó sử dụng js), kể từ khi tôi chạy một kiểm tra đôi trên máy chủ là tốt.

Tôi hoàn toàn bị mất về cách thực hiện so sánh ngày trong jQuery hoặc chỉ javascript cũ đơn giản. Nếu nó giúp, tôi đang sử dụng jquery datepicker

+0

BTW, đó là một số định dạng ngày ngớ ngẩn bạn đang chấp nhận. Nếu bạn có bất kỳ sự kiểm soát nào đối với quyết định chấp nhận chúng, tôi khuyên bạn nên xem xét lại tính hữu dụng/sự cần thiết của tất cả chúng. – Phrogz

+0

Có gì ngớ ngẩn về họ? Chúng tôi hoạt động ở nhiều quốc gia và chúng được chấp nhận định dạng. Tôi cho rằng bạn nghĩ rằng mọi người làm việc trên định dạng (vô lý) của Mỹ? – JonoB

+0

Lòng tốt, không! Định dạng của Hoa Kỳ là kinh khủng, nhưng nó không có trong danh sách của bạn và sẽ dễ nhầm lẫn với trường hợp đầu tiên của bạn. Nếu bạn chắc chắn rằng tất cả bốn là cần thiết, bằng mọi cách sử dụng chúng. Đối với tôi, có vẻ như bạn đã chọn cả hai tùy ý cho phép và tùy ý hạn chế cùng một lúc. * Nhún vai * – Phrogz

Trả lời

-4

Bạn đã xem datejs? (sử dụng gói toàn cầu hóa thích hợp để phân tích cú pháp dd/mm/yyyy chính xác)

Chỉ cần chuyển ngày vào phương thức parse() và so sánh với ngày hôm nay.

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)){ 
    // ... 
} 

Sử dụng UTC * phương pháp đảm bảo rằng hai ngày tương đương ở các múi giờ khác nhau phù hợp với những ngày toàn cầu cùng đều giống nhau. (Không cần thiết nếu bạn phân tích cú pháp trực tiếp cả hai ngày, nhưng cần phải suy nghĩ kỹ.)

+0

Bạn nên đề cập, đây thực sự là chỉ mục tháng và không phải là số tháng, do đó, cần phải thêm 1 –

+0

Sẽ không nhanh hơn trong hầu hết các trường hợp để kiểm tra các ngày bằng nhau, sau đó là tháng và năm sau? –

+0

@ xcy7e 웃 Tùy thuộc vào dữ liệu đầu vào, nhưng có thể. Tuy nhiên, nếu bạn có thể tạo ra một trường hợp thử nghiệm nơi điều này thực sự tạo ra bất kỳ sự khác biệt nào có thể đo lường được, tôi sẽ rất ấn tượng. – Phrogz

0

Date.js là thư viện tiện dụng để thao tác và định dạng ngày. Nó có thể giúp đỡ trong tình huống này.

+1

Có cần sử dụng Date.js để chỉ so sánh Ngày không? – Exception

+0

Không, bạn không. Nhưng nếu ngày có định dạng khác nhau, Date.js rất tiện lợi để bình thường hóa chúng. –

136

Một ngày đơn giản so sánh trong JS tinh khiết nên là đủ:

// 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 
} 

Dưới đây là a working JSFiddle.

+1

+1 để sử dụng phiên bản giờ/phút/giây/ms của 'setHours'. – Phrogz

+3

Nó không hoạt động nếu định dạng ngày là "21-11-2011" hoặc "21/11/2011" – JonoB

+4

Đừng quên sao chép ngày nhập nếu bạn muốn sử dụng lại nó. ==> Sử dụng newDate (date.valueOf()). SetHours (0,0,0,0) –

4

Chỉ cần sử dụng đoạn mã sau vào JavaScript của bạn:

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

Thay đổi điều kiện theo requirement.Here của bạn là một liên kết để so sánh compare in java script

18

Hãy thử sử dụng moment.js

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

Bạn có thể thay thế chuỗi 'ngày' bằng 'năm, tháng, phút' nếu bạn muốn.

55

cho đầy đủ, lấy từ this solution:

Bạn có thể sử dụng toDateString:

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

không phụ thuộc thư viện, và nhìn sạch hơn 'setHours()' phương pháp thể hiện trong một câu trả lời trước, IMHO

+0

Điều này rất khó. Trong trường hợp của một chiếc đồng hồ góc tôi có newDates [i] = 1476252000000 và oldDates [i] === 1476252000000. Tuy nhiên, chúng không bằng nhau. Date.parse (newDates [1]) === Date.parse (oldDates [1]) trả về false. – Winnemucca

+0

@Winnemucca Trả về 'true' cho tôi đối với các giá trị đã cho. Bạn không phải sử dụng 'Date.parse' để kiểm tra tính bình đẳng – User528491

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

< = cũng hoạt động, Mặc dù với =, nó có thể phải khớp với mili giây.

+0

Điều này không hoạt động nếu ngày đó cũng có thời gian. –

0

Giải pháp sau so sánh số nguyên dấu thời gian chia cho giá trị giờ, phút, giây, millis.

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

Các truncs dấu ngã là kết quả bộ phận (xem this article about integer division)

Các vấn đề liên quan