2008-09-16 56 views
13

Trong JavaScript, cách tốt nhất để xác định xem ngày được cung cấp có nằm trong phạm vi hợp lệ không?Sử dụng Javascript, làm cách nào để đảm bảo phạm vi ngày hợp lệ?

Ví dụ về điều này có thể kiểm tra xem liệu người dùng nhập requestedDate có phải là một phần của tuần làm việc hợp lệ tiếp theo hay không. Lưu ý rằng đây không chỉ là kiểm tra xem một ngày có lớn hơn một ngày khác với ngày hợp lệ hay bằng hoặc lớn hơn đầu dưới của phạm vi trong khi nhỏ hơn hoặc bằng phần trên của phạm vi.

Trả lời

15

Điều này thực sự là một vấn đề mà tôi đã thấy đến trước khi rất nhiều trong công việc của tôi và bit sau đây là câu trả lời của tôi cho vấn đề.

// checkDateRange - Checks to ensure that the values entered are dates and 
//  are of a valid range. By this, the dates must be no more than the 
//  built-in number of days appart. 
function checkDateRange(start, end) { 
    // Parse the entries 
    var startDate = Date.parse(start); 
    var endDate = Date.parse(end); 
    // Make sure they are valid 
    if (isNaN(startDate)) { 
     alert("The start date provided is not valid, please enter a valid date."); 
     return false; 
    } 
    if (isNaN(endDate)) { 
     alert("The end date provided is not valid, please enter a valid date."); 
     return false; 
    } 
    // Check the date range, 86400000 is the number of milliseconds in one day 
    var difference = (endDate - startDate)/(86400000 * 7); 
    if (difference < 0) { 
     alert("The start date must come before the end date."); 
     return false; 
    } 
    if (difference <= 1) { 
     alert("The range must be at least seven days apart."); 
     return false; 
    } 
    return true; 
} 

Bây giờ một vài điều cần lưu ý về mã này, Date.parse chức năng nên làm việc cho hầu hết các loại đầu vào, nhưng đã được biết là có vấn đề với một số định dạng như "YYYY MM DD" vì vậy bạn nên kiểm tra trước khi sử dụng nó. Tuy nhiên, tôi dường như nhớ lại rằng hầu hết các trình duyệt sẽ giải thích chuỗi ngày tháng được đặt cho Date.parse dựa trên cài đặt vùng máy tính.

Ngoài ra, hệ số cho 86400000 phải là bất kể phạm vi ngày bạn đang tìm kiếm là. Vì vậy, nếu bạn đang tìm kiếm những ngày cách nhau ít nhất một tuần thì nó phải là bảy.

+0

xin cập nhật từ khi bắt đầu và kết thúc checkDateRange (bắt đầu, kết thúc) của nó rất khó khăn để chk – John

7

Vì vậy, nếu tôi hiểu rõ ràng, bạn cần phải xem liệu một ngày có lớn hơn ngày kia hay không.

function ValidRange(date1,date2) 
{ 
    return date2.getTime() > date1.getTime(); 
} 

Sau đó bạn cần phải phân tích các chuỗi bạn đang nhận được từ giao diện người dùng, với Date.parse, như thế này:

ValidRange(Date.parse('10-10-2008'),Date.parse('11-11-2008')); 

Điều đó giúp đỡ?

+0

Vấn đề không quá nhiều để kiểm tra xem một ngày có lớn hơn ngày khác hay không nhưng kiểm tra xem một ngày có nằm trong phạm vi ngày hợp lệ đã cho không. Ví dụ, nếu yêu cầu nghiệp vụ là một nhiệm vụ được giải quyết trong bảy ngày tới thì bạn muốn đảm bảo rằng ngày được lên lịch ít hơn hoặc bằng bảy ngày kể từ ngày hiện tại. – rjzii

4
var myDate = new Date(2008, 9, 16); 

// is myDate between Sept 1 and Sept 30? 

var startDate = new Date(2008, 9, 1); 
var endDate = new Date(2008, 9, 30); 

if (startDate < myDate && myDate < endDate) { 
    alert('yes'); 
    // myDate is between startDate and endDate 
} 

Có nhiều định dạng khác nhau mà bạn có thể chuyển đến hàm tạo Date() để tạo ngày. Bạn cũng có thể xây dựng một ngày mới với thời gian hiện tại:

var now = new Date(); 

và thiết lập thuộc tính khác nhau trên đó:

now.setYear(...); 
now.setMonth(...); 
// etc 

Xem http://www.javascriptkit.com/jsref/date.shtml hoặc Google để biết thêm chi tiết.

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