2010-10-07 23 views

Trả lời

0

Date.parse sẽ PRB loại bạn ra ngoài, mà không cần jquery:

http://www.w3schools.com/jsref/jsref_parse.asp

Trên gỡ bỏ sau khi một số loại linh hồn chỉ ra cách cơ bản parseDate thực sự là.

Ngoài ra còn có một phương pháp "parseDate" trong plugin JQuery UI datepicker:

http://docs.jquery.com/UI/Datepicker/parseDate

+0

var d = Date.parse ("13/13/2010"); GIVES 1294857000000 :) NHƯNG CẦN ĐƯỢC SỬ DỤNG –

+0

Ồ, điều đó thật tệ! Tôi nghĩ nó đã nói với bạn một cách chính xác nếu ngày đó là hợp lệ. –

4

Không có chức năng ngày được tích hợp trong lõi jQuery ... và nó không thực sự làm bất cứ điều gì trực tiếp để trợ giúp với ngày tháng, vì vậy không có nhiều thư viện ở trên đó (trừ khi chúng là bộ chọn ngày, v.v.) There are several JavaScript date libraries available though, để làm việc với chúng dễ dàng hơn một chút.

Tôi không thể trả lời chắc chắn những gì tốt nhất ... nó phụ thuộc vào cách họ đang nhập và văn hóa bạn đang xử lý, hãy nhớ rằng các nền văn hóa khác nhau được sử dụng để xem ngày của họ ở định dạng khác nhau, ví dụ nhanh, MM/DD/YYYYYYYY/MM/DD (hoặc hàng chục người khác).

2

Cách tốt nhất để nhận dữ liệu nhập ngày của người dùng là bộ chọn ngày chỉ cung cấp ngày hợp lệ. Nó có thể được thực hiện với một chuỗi, nhưng bạn có trách nhiệm thu hút người dùng của bạn bằng cách yêu cầu họ sử dụng định dạng bạn đã chọn.

Bạn cần chỉ định trong trình xác thực của mình nếu ngày trước tháng.

Điều này sử dụng đối số thứ hai để thực thi thứ tự. Không có đối số thứ hai, nó sử dụng thứ tự mặc định của máy tính.

// computer default date format order: 
Date.ddmm= (function(){ 
    return Date.parse('2/6/2009')> Date.parse('6/2/2009'); 
})() 

phép tên tháng cũng như chữ số: '21 Jan 2000' hoặc 'Tháng Mười 21,1975'

function validay(str, order){ 
    if(order== undefined) order= Date.ddmm? 0: 1; 
    var day, month, D= Date.parse(str); 
    if(D){ 
     str= str.split(/\W+/); 

     // check for a month name first: 
     if(/\D/.test(str[0])) day= str[1]; 
     else if (/\D/.test(str[1])) day= str[0]; 
     else{ 
      day= str[order]; 
      month= order? 0: 1; 
      month= parseInt(str[month], 10) || 13; 
     } 
     try{ 
      D= new Date(D); 
      if(D.getDate()== parseInt(day, 10)){ 
       if(!month || D.getMonth()== month-1) return D; 
      } 
     } 
     catch(er){} 
    } 
    return false; 
} 
0

Nếu bạn không muốn sử dụng các plugin jquery tôi thấy chức năng tại:

http://www.codetoad.com/forum/17_10053.asp

Làm việc cho tôi. Những người khác tôi thấy không hoạt động tốt.

CẬP NHẬT:

Từ phiên bản cache của trang tại địa chỉ: http://web.archive.org/web/20120228171226/http://www.codetoad.com/forum/17_10053.asp

// ****************************************************************** 
 
// This function accepts a string variable and verifies if it is a 
 
// proper date or not. It validates format matching either 
 
// mm-dd-yyyy or mm/dd/yyyy. Then it checks to make sure the month 
 
// has the proper number of days, based on which month it is. 
 

 
// The function returns true if a valid date, false if not. 
 
// ****************************************************************** 
 

 
function isDate(dateStr) { 
 

 
    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; 
 
    var matchArray = dateStr.match(datePat); // is the format ok? 
 

 
    if (matchArray == null) { 
 
     alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy."); 
 
     return false; 
 
    } 
 

 
    month = matchArray[1]; // [email protected] date into variables 
 
    day = matchArray[3]; 
 
    year = matchArray[5]; 
 

 
    if (month < 1 || month > 12) { // check month range 
 
     alert("Month must be between 1 and 12."); 
 
     return false; 
 
    } 
 

 
    if (day < 1 || day > 31) { 
 
     alert("Day must be between 1 and 31."); 
 
     return false; 
 
    } 
 

 
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) { 
 
     alert("Month " + month + " doesn`t have 31 days!") 
 
     return false; 
 
    } 
 

 
    if (month == 2) { // check for february 29th 
 
     var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); 
 
     if (day > 29 || (day == 29 && !isleap)) { 
 
      alert("February " + year + " doesn`t have " + day + " days!"); 
 
      return false; 
 
     } 
 
    } 
 
    return true; // date is valid 
 
}

+0

Liên kết bị hỏng. –

32

Nếu bạn không muốn để đối phó với các thư viện bên ngoài, một đơn giản javascript chỉ giải pháp là:

function isDate(val) { 
    var d = new Date(val); 
    return !isNaN(d.valueOf()); 
} 

CẬP NHẬT:       !! Major Caveat !!
@BarryPicker tăng điểm tốt trong nhận xét. JavaScript lặng lẽ chuyển đổi từ ngày 29 tháng 2 đến ngày 1 tháng 3 cho tất cả các năm không phải là bước nhảy vọt. Hành vi này dường như bị giới hạn nghiêm ngặt trong các ngày đến 31 (ví dụ: ngày 32 tháng 3 không được chuyển đổi thành ngày 1 tháng 4, nhưng ngày 31 tháng 6 được chuyển đổi thành ngày 1 tháng 7). Tùy thuộc vào tình hình của bạn, điều này có thể là một giới hạn, bạn có thể chấp nhận, nhưng bạn cần phải nhận thức nó:

>>> new Date('2/29/2014') 
Sat Mar 01 2014 00:00:00 GMT-0500 (Eastern Standard Time) 
>>> new Date('3/32/2014') 
Invalid Date 
>>> new Date('2/29/2015') 
Sun Mar 01 2015 00:00:00 GMT-0500 (Eastern Standard Time) 
>>> isDate('2/29/2014') 
true // <-- no it's not true! 2/29/2014 is not a valid date! 
>>> isDate('6/31/2015') 
true // <-- not true again! Apparently, the crux of the problem is that it 
     //  allows the day count to reach "31" regardless of the month.. 
+0

cho asp.net nếu bạn sử dụng điều khiển CustomValidator, bạn có thể gọi hàm từ thuộc tính ClientValidationFunction, hàm này ít nhiều: hàm IsDate (người gửi, args) { var d = new Date ($ ('# tbBirthDate ') .val()); args.IsValid =! IsNaN (d.valueOf()); trả lại; } – juanytuweb

+1

Phương pháp này không hoạt động chính xác trong ngày 29/2/2014 - không có năm nhuận cho năm 2014.Trong thực tế, phương pháp này cho biết 2/30/2014 là hợp lệ - và điều này sẽ không bao giờ hợp lệ. Khi sử dụng 2/30/2014 làm đầu vào, biến 'd' được gán giá trị của ngày 2 tháng 3 năm 2014 trên dòng đầu tiên trong hàm của bạn, do đó, một số chuyển đổi tiềm ẩn đang xảy ra ... – barrypicker

+0

@barrypicker: Cảm ơn người đứng đầu- lên. Tôi đã cập nhật câu trả lời của mình cho phù hợp. – mwolfe02

0

tôi đến giải pháp này, làm phức tạp hơn như tôi sử dụng định dạng châu Âu và javascript rõ ràng là người Mỹ!

function CheckDate() 
{ 
    var D = document.getElementById('FlightDate').value; 
    var values = D.split("-") 
    var newD = values [1] + "/" + values [0] + "/" + values[2] 
    var d = new Date(newD); 
    if(d == 'Invalid Date')document.getElementById('FlightDate').value = ""; 
} 

Lộn xộn, nhưng thực hiện công việc. Nếu người dùng của bạn là người Mỹ và đặt ngày ở giữa, (mà tôi sẽ không bao giờ hiểu!), Sau đó bạn có thể rời khỏi sự phân chia và tạo ra newD. Có thể là tôi có thể ghi đè chủ nghĩa người Mỹ mặc định trong JS bằng cách thiết lập văn hóa hoặc một số như vậy, nhưng đối tượng mục tiêu của tôi là độc quyền ở Châu Âu để dễ dàng hơn trong việc sắp xếp nó theo cách này. (. Ồ, điều này làm việc trong Chrome, đã không kiểm tra nó trên bất cứ điều gì khác)

+0

Không hoạt động trong nghĩa là! (tức là chuyển đổi nó thành một ngày hợp lệ hoàn toàn khác!) Tôi sẽ chuyển đổi một hàm C tôi đã viết cho phần mềm nhúng để xác minh ngày theo tháng nhưng tôi nghĩ tôi chỉ phải làm những công cụ cấp thấp như vậy trong công việc ban ngày của mình ! Họ có một datepicker, tôi sẽ xác minh nó phía máy chủ với VB isdate. Hoàn thành công việc. – user2981217

2

Cách đơn giản nhất trong javascript là:

function isDate(dateVal) { 
    var d = new Date(dateVal); 
    return d.toString() === 'Invalid Date'? false: true; 
} 
1

Vấn đề là nhập vào ngày 31 tháng 2 sẽ trở lại một ngày hợp lệ trong JavaScript. Nhập vào năm, tháng và ngày, biến nó thành một ngày và xem ngày đó có khớp với những gì bạn nhập vào hay không, thay vì một ngày nào đó vào tháng 3.

function isDate(y, m, d) { 
    var a = new Date(y, m-1, d); 
    // subtract 1 from the month since .getMonth() is zero-indexed. 
    if (a.getFullYear() == y && a.getMonth() == m-1 && a.getDate() == d) { 
     return true; 
    } else { 
     return false; 
    } 
} 

Về mặt kỹ thuật, đây là vani JavaScript, vì jQuery không thực sự mở rộng trên đối tượng Ngày gốc.

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