2010-07-12 35 views
6

Tôi nhận thấy Date.Parse không thể xử lý chỉ 2 chữ số ngày.Làm thế nào để làm cho Date.parse javascript hiểu được những năm ngắn ngủi?

Nói rằng tôi có điều này

mm/dd/yy = 7/11/20 

ngày phân tích cú pháp sẽ nghĩ rằng đó là = 7/11/1920. Bạn có thể thiết lập nó để sử dụng năm hai nghìn? Giống như nó là lạ lùng tôi có bộ chọn ngày tháng u.i jquery và nếu bạn gõ vào 7/11/20 nó sẽ tìm ra 2020.

Vì vậy, nó sẽ là tốt đẹp nếu Date.parse có thể giữ cho tôi thay vì có cả hai không biết những gì đang xảy ra hoặc cả hai biết những gì đang xảy ra sau đó có một mà biết và một trong đó không biết.

+1

Giải pháp tốt nhất là để cung cấp các cập nhật đầy đủ, luôn luôn. – BrunoLM

+0

@BurnoLM Tôi đồng ý đó là lý do tại sao tôi có cửa sổ bật lên datepicker khi hộp văn bản được nhấp tuy nhiên người dùng vẫn có thể vì lý do nào đó nhập thủ công những gì tôi đã làm "7/11/20" vì bất kỳ lý do gì. Nó không ảnh hưởng đến bất kỳ mã C# nào của tôi vì nó chỉ ra rằng nó là năm 2020 nhưng nó vít một số danh sách thả xuống của tôi được lọc dựa trên ngày tháng. Vì vậy, nếu tôi có thể sửa chữa nó tôi cũng muốn quá cũng cho bất cứ lý do gì jquery xác nhận "ngày" không nghĩ rằng đó là một lỗi xác nhận và có định dạng hợp lệ. – chobo2

Trả lời

5

Không phải là tôi biết. Nhưng bạn luôn có thể điều chỉnh năm:

YourDate="7/11/20"; 
DateObj=new Date(YourDate.replace(/(\d\d)$/,"20$1")); 

alert(DateObj); 

This code in action.

Edit: Đoạn mã dưới đây sẽ xử lý cả hai đầy đủ và ngắn năm:

YourDate="7/11/2020"; 
DateObj=new Date(YourDate.replace(/\/(\d\d)$/,"/20$1")); 

alert(DateObj); 

This code in action.

+1

Đó là một mẹo hay! – BrunoLM

+0

Điều này đang làm gì? Tôi hơi bối rối với $ 1 cũng người dùng luôn có thể đưa ra một ngày đầy đủ. Sau đó, điều này không thành công. Vậy làm thế nào nó có thể được sửa đổi? – chobo2

+0

@BrunoLM - Cảm ơn.:) –

0

Vì vậy, câu hỏi của bạn là liệu bạn có thể thay đổi cách Date.parse hoạt động để số có hai chữ số thấp d ates được hiểu là ngày sau năm 2000?

Có, nó có thể được thực hiện, chỉ cần đổ bóng Date.parse với chức năng phân tích cú pháp của riêng bạn.

// don't do this! 
Date.parse = function (str) { /* your parse routine here */ } 

Tất nhiên, thường là một ý tưởng rất xấu đối với các thuộc tính của đối tượng lưu trữ, vì nó sẽ gây ra hành vi không đúng trong các tập lệnh khác. .

Bạn cũng nên sử dụng hai chữ số, nhưng điều đó có thể nằm ngoài tầm kiểm soát của bạn. Nếu nó không nằm ngoài tầm kiểm soát của bạn, tôi khuyên bạn chỉ nên quên ngày có 2 chữ số và sử dụng giá trị cả năm thay thế.

+1

Chỉ cần thực thi: điều này rất, rất nguy hiểm !! – BrunoLM

+0

Ya Tôi không nghĩ rằng tôi sẽ làm điều đó lol. – chobo2

-1

Làm thế nào về điều này?

var date = '7/11/20'; 
var idx = date.lastIndexOf('/') + 1; 
date = date.substr(0,idx) + '20' + date.substr(idx); 
var result = Date.parse(date);​ 
alert(result); 

hoặc phiên bản này sẽ kiểm tra định dạng YYYY trước.

var date = '7/11/2020'; 
var idx = date.lastIndexOf('/') + 1; 
if(date.substr(idx).length < 4) { 
    date = date.substr(0,idx) + '20' + date.substr(idx); 
} 
var result = Date.parse(date); 
alert(new Date(result))​;​ 
+0

Không hoạt động tốt mà bạn biết ... '7/11/2000 = 7/11/202000' – BrunoLM

+0

@BrunoLM - Tôi nghĩ giả định là định dạng YY sẽ luôn được sử dụng. Dễ dàng, đủ để thêm một thử nghiệm cho một định dạng YYYY. – RightSaidFred

+0

Một người dùng có thể nhập YY hoặc YYYY. Tôi không chắc chắn về YYY không biết nếu điều đó hoạt động. Tôi biết 2 C# đầu tiên có thể tìm ra và phân tích cú pháp và vì vậy có thể datepicker. – chobo2

0

Đây là giải pháp của tôi:

function parseDate(stringValue) 
{ 
    var date = new Date(stringValue); 
    if (!isNaN(date.getTime())) 
    { 
     // if they typed the year in full then the parsed date will have the correct year, 
     // if they only typed 2 digits, add 100 years to it so that it gets translated to this century 
     if (stringValue.indexOf(date.getFullYear()) == -1) 
     { 
      date.setFullYear(date.getFullYear() + 100); 
     } 

     return date; 
    } 
    else 
    { 
     return null; 
    } 
} 
Các vấn đề liên quan